【SQL Server 2012】按倒序儲存“分組統計”結果的暫存資料表到建立表

來源:互聯網
上載者:User

標籤:esc   div   subject   欄位   要求   microsoft   相關   red   www   

程式預先說明:

本文訪問的資料庫是基於存有RDF三元組的開來源資料庫Localyago修改的庫,其中只有一個表,表中有五個屬性:主語subject、謂語predict、賓語object、主語的編號subid,賓語的編號objid。每條記錄由(subject,predict,object,subid,objid)組成。其中當賓語為字元型而不是實體時(比如“2011”),編號預設為0。有以下資料表:

  

程式需求:
  1. 統計每個主語有多少相關的謂語屬性(每個謂語可有多個賓語),即有多少以該實體作為主語的記錄
  2. 由於結果非常巨大,所以需要將結果儲存到資料庫中的建立的一個表中,並按倒序儲存
具體過程:
  1. 統計每個主語的謂詞數目,輸出(主語,主語id和主語屬性數目),按每個主語的屬性數目倒序輸出:
select subject, subid, count(subject) as subprenumfrom [Localyago].[dbo].[yago]group by subject,subidorder by subprenum DESC;

  group by實現分組統計,這裡按subject分類,由於我們在select的時候選擇了subject和subid,而select中的欄位要麼包含在group by語句裡,要麼被包含在彙總函式裡,所以我們在這裡的group by中也要寫入subid,不然會報錯

       order by 是排序,預設從小到大輸出,加上DESC就變成倒序、從大到小輸出

       得到如下結果:

        

    2. 將查詢結果的暫存資料表按subprenum倒序存入新的表中,便於儲存和查詢

         最基本的方式:

                如果新表不存在

select * into 新表 from 舊錶

                如果新表不存在            

insert into 新表 select * from 舊錶

        從而有:

select subject, subid, count(subject) as subprenuminto Localyago.dbo.subprefrom [Localyago].[dbo].[yago]group by subject,subid;order by subprenum;

        然後發現雖然我們上一步查詢的結果是有序的,但運行這個之後產生的新表,並沒有按照subprenum排序,順序是亂的。

        檢索之後發現這是由於SQL Server自身的局限,如果有特殊需要,要求暫存資料表裡面的資料有序,則可以通過【建立叢集索引】來解決這個問題。具體請參考博文:https://www.cnblogs.com/kerrycode/p/5172333.html

        從而改進代碼如下:

select subject, subid, count(subject) as subprenuminto Localyago.dbo.subprefrom [Localyago].[dbo].[yago]where 1=0group by subject,subid;create clustered index inx_subpre on Localyago.dbo.subpre(subprenum DESC);--建立叢集索引,按subprenum倒序排序insert into Localyago.dbo.subpre    select subject, subid, count(subject) as subprenum    from [Localyago].[dbo].[yago]    where subid !=0    group by subject,subid    order by subprenum;

        這樣運行之後得到的新表subpre裡的記錄就是按照subprenum倒序排序了

        如下:

        

 

 

    




【SQL Server 2012】按倒序儲存“分組統計”結果的暫存資料表到建立表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.