溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SQLServer中的row_number函數(shù)怎么使用

發(fā)布時間:2023-03-02 13:51:25 來源:億速云 閱讀:198 作者:iii 欄目:MySQL數(shù)據(jù)庫

本文小編為大家詳細(xì)介紹“SQLServer中的row_number函數(shù)怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“SQLServer中的row_number函數(shù)怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識吧。

    一、SQL Server Row_number函數(shù)簡介

    ROW_NUMBER()是一個Window函數(shù),它為結(jié)果集的分區(qū)中的每一行分配一個連續(xù)的整數(shù)。 行號以每個分區(qū)中第一行的行號開頭。

    語法實(shí)例:

    select *,row_number() over(partition by column1 order by column2) as n
    from tablename

    在上面語法中:

    • PARTITION BY子句將結(jié)果集劃分為分區(qū)。 ROW_NUMBER()函數(shù)分別應(yīng)用于每個分區(qū),并重新初始化每個分區(qū)的行號。

    • PARTITION BY子句是可選的。如果未指定,ROW_NUMBER()函數(shù)會將整個結(jié)果集視為單個分區(qū)。

    • ORDER BY子句定義結(jié)果集的每個分區(qū)中的行的邏輯順序。 ORDER BY子句是必需的,因?yàn)镽OW_NUMBER()函數(shù)對順序敏感

    二、Row_number函數(shù)的具體用法

    1.使用row_number()函數(shù)對結(jié)果集進(jìn)行編號

    示例:

    對test_user表的查詢結(jié)果標(biāo)記行號,并新增 “編號”列返回

    -- 使用 ROW_NUMBER()函數(shù)對結(jié)果進(jìn)行編號
    select ROW_NUMBER() over(order by id) as 編號,* 
    from test_user;

    運(yùn)行結(jié)果:

    SQLServer中的row_number函數(shù)怎么使用

    可以看到,查詢結(jié)果新增了一列,專門用來標(biāo)記行號。

    有了編號,我們就可以方便地進(jìn)行分頁查詢了。

    2.對結(jié)果集按照指定列進(jìn)行分組,并在組內(nèi)按照指定列排序

    示例:

    把test_user表的name按照小組進(jìn)行分組顯示,分組后在組內(nèi)進(jìn)行從低到高id排序

    -- 使用partition by對結(jié)果集進(jìn)行分組
    select *,row_number() over(partition by name order by id) as n 
    from  test_user;

    運(yùn)行結(jié)果:

    SQLServer中的row_number函數(shù)怎么使用

    3.對結(jié)果集按照指定列去重

    示例:

    對 test_user表按name進(jìn)行分組顯示,結(jié)果集中只顯示每組中一條 id最小的數(shù)據(jù)

    select a.* from (
    	select *,row_number() over(partition by name order by id) as row_id from test_user
    	) as a 
    -- 只查詢組內(nèi)編號為1的數(shù)據(jù)
    where a.row_id<2;

    運(yùn)行結(jié)果:

    SQLServer中的row_number函數(shù)怎么使用

    查詢結(jié)果先是經(jīng)過name分組,然后組內(nèi)進(jìn)行id升序排序,組內(nèi)編號為1的第1條數(shù)據(jù),自然就是id最小的數(shù)據(jù)。

    注意:

    當(dāng)我們按成績分?jǐn)?shù)查詢名次等需求時,不能用row_number(),因?yàn)槿绻嘤袃蓚€并列第一,row_number()只返回一個結(jié)果。這個時候就要用到另外一個函數(shù),rank()和dense_rank()。

    rank()和dense_rank()區(qū)別:

    1、RANK()
    在計(jì)算排序時,若存在相同位次,會跳過之后的位次。
    例如,有3條排在第1位時,排序?yàn)椋?,1,1,4&middot;&middot;&middot;&middot;&middot;&middot;
    2、DENSE_RANK()
    這就是題目中所用到的函數(shù),在計(jì)算排序時,若存在相同位次,不會跳過之后的位次。
    例如,有3條排在第1位時,排序?yàn)椋?,1,1,2&middot;&middot;&middot;&middot;&middot;&middot;

    讀到這里,這篇“SQLServer中的row_number函數(shù)怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點(diǎn)還需要大家自己動手實(shí)踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI