<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blog.Toby

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks
    列出每一行的排名是一個常見的需求,可惜 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 渠上月 閱讀(747) 評論(0)  編輯  收藏 所屬分類: sql (sqlServer)
    主站蜘蛛池模板: 4338×亚洲全国最大色成网站| 久久亚洲AV成人无码电影| 中文字幕在线观看免费| 亚洲综合精品香蕉久久网97| 在线观看免费人成视频色| 美女黄频a美女大全免费皮| 亚洲人成77777在线播放网站| 久视频精品免费观看99| 相泽南亚洲一区二区在线播放| 亚洲国产一成人久久精品| 日韩在线免费视频| 一个人免费观看视频在线中文 | 亚洲avav天堂av在线网毛片| 久久激情亚洲精品无码?V| 37pao成人国产永久免费视频 | 亚洲精品成人片在线观看精品字幕| 精品福利一区二区三区免费视频| 美女羞羞喷液视频免费| 亚洲影院在线观看| 亚洲高清国产拍精品青青草原 | 四虎永久在线精品免费观看视频| av片在线观看永久免费| 亚洲AV无码久久久久网站蜜桃 | 日本最新免费网站| 国产成人无码免费看片软件 | 美女被爆羞羞网站在免费观看| 国产亚洲精久久久久久无码| 美女被免费视频网站a国产| 麻豆成人久久精品二区三区免费| 九九精品国产亚洲AV日韩| 亚洲福利视频网址| 人人狠狠综合久久亚洲88| 国产一区二区三区在线免费| 国产免费AV片在线播放唯爱网| 大地资源中文在线观看免费版| 亚洲GV天堂无码男同在线观看| 亚洲精品日韩专区silk| 亚洲国产精品无码专区影院 | 亚洲A∨精品一区二区三区下载| 亚洲精品日韩专区silk| 久久青青草原亚洲AV无码麻豆 |