blog.Toby

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks
          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Securities

          文章

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          列出每一行的排名是一個常見的需求,可惜 SQL 並沒有一個很直接的方式達到這個需求。要以 SQL 列出排名,基本的概念是要做一個表格自我連結 (self join),將結果依序列出,然後算出每一行之前 (包含那一行本身) 有多少行數。這樣講讀者聽得可能有點困惑,所以最好的方式是用一個實例來介紹。假設我們有以下的表格:

          Total_Sales表格

          Name

          Sales

          John

          10

          Jennifer

          15

          Stella

          20

          Sophia

          40

          Greg

          50

          Jeff

          20

           

          要找出每一行的排名,我們就打入以下的 SQL 語句:

          SELECT a1.Name, a1.Sales, COUNT(a2.sales) Sales_Rank
          FROM Total_Sales a1, Total_Sales a2
          WHERE a1.Sales <= a2.Sales or (a1.Sales=a2.Sales and a1.Name = a2.Name)
          GROUP BY a1.Name, a1.Sales
          ORDER BY a1.Sales DESC, a1.Name DESC;

          結果:

          Name

          Sales

          Sales_Rank

          Greg

          50

          1

          Sophia

          40

          2

          Stella

          20

          3

          Jeff

          20

          3

          Jennifer

          15

          5

          John

          10

          6

          我們先來看 WHERE子句。在字句的第一部分 (a1.Sales <= a2.Sales),我們算出有多少筆資料 Sales 欄位的值是比自己本身的值小或是相等。如果在 Sales 欄位中沒有同樣大小的資料,那這部分的 WHERE子句本身就可以產生出正確的排名。

          子句的第二部分,(a1.Sales=a2.Sales and a1.Name = a2.Name),則是讓我們在 Sales 欄位中有同樣大小的資料時 (像 Stella 及 Jeff 這兩筆資料),仍然能夠產生正確的排名。

          posted on 2007-11-19 16:02 渠上月 閱讀(745) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
          主站蜘蛛池模板: 舟山市| 长垣县| 和静县| 镇江市| 通化县| 侯马市| 文昌市| 洛扎县| 揭阳市| 红原县| 桦甸市| 沛县| 高要市| 南溪县| 敦煌市| 久治县| 白城市| 鲜城| 阿拉善右旗| 肃南| 昌江| 澄江县| 沂南县| 庐江县| 云林县| 天门市| 黑龙江省| 湾仔区| 定安县| 清苑县| 咸宁市| 巴林左旗| 江津市| 余姚市| 莎车县| 乌海市| 乾安县| 松溪县| 太湖县| 民县| 鄢陵县|