<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)
    主站蜘蛛池模板: 91精品视频在线免费观看| 日本黄页网址在线看免费不卡| 国内精品99亚洲免费高清| 又粗又大又猛又爽免费视频 | 午夜在线免费视频 | 亚洲一区二区视频在线观看 | 亚洲日本一线产区和二线产区对比| 5g影院5g天天爽永久免费影院| 亚洲电影一区二区| 日本免费人成网ww555在线 | 亚洲国产精品一区二区久久hs| 在线视频网址免费播放| 综合亚洲伊人午夜网| 国精产品一区一区三区免费视频 | 黄色一级毛片免费看| 亚洲精品无码永久在线观看| 亚欧洲精品在线视频免费观看| 色久悠悠婷婷综合在线亚洲| 中文字幕乱码免费看电影| 亚洲自偷自偷精品| 三年片在线观看免费观看高清电影| 亚洲色偷偷色噜噜狠狠99网| 成人免费无码精品国产电影| 男女交性无遮挡免费视频| 国产亚洲精品一品区99热| 亚洲啪啪免费视频| 亚洲狠狠婷婷综合久久蜜芽| 亚洲AV成人潮喷综合网| 国色精品va在线观看免费视频 | 亚洲国产成人久久综合一区77 | 成人精品视频99在线观看免费| 亚洲阿v天堂在线| 日本阿v免费费视频完整版| 亚洲av无码专区在线观看亚| 中文字幕精品无码亚洲字| 久久美女网站免费| 亚洲国产精品久久久久秋霞小| 91麻豆精品国产自产在线观看亚洲 | 久久精品国产精品亚洲蜜月| 欧美最猛性xxxxx免费| 永久免费无码日韩视频|