首先按大多数重复记录排序

问题描述 投票:3回答:2
create table tbl_dup
(
    name varchar(100)
);

insert into tbl_dup values('Arsel Rous'),('Oram Rock'),('Oram Rock'),('Brown Twor'),
                          ('John Mak'),('Mak Dee'),('Smith Will'),('Mak Dee'),
                          ('John Mak'),('Oram Rock'),('John Mak'),('Oram Rock');

查询:我正在寻找排序重复记录应该在结果集中的第一级显示。

select * 
from
(
select name,row_number() over(partition by name order by name) rn 
from tbl_dup
) a
order by name,rn;

获得:

name        rn
--------------
Arsel Rous  1
Brown Twor  1
John Mak    1
John Mak    2
John Mak    3
Mak Dee     1
Mak Dee     2
Oram Rock   1
Oram Rock   2
Oram Rock   3
Oram Rock   4
Smith Will  1

预期结果:

name        rn
---------------
Oram Rock   1
Oram Rock   2
Oram Rock   3
Oram Rock   4
John Mak    1
John Mak    2
John Mak    3
Mak Dee     1
Mak Dee     2
Arsel Rous  1
Brown Twor  1
sql-server sql-server-2008-r2
2个回答
2
投票

尝试使用COUNT作为ORDER BY子句中的分析函数:

SELECT name, ROW_NUMBER() OVER (PARTITION by name ORDER BY name) rn
FROM tbl_dup
ORDER BY COUNT(*) OVER (PARTITION BY name) DESC, rn;

enter image description here

Demo


1
投票

您需要先按desc的出现次数asc和行号进行排序。

select name,rn 
from
(
    select name,row_number() over(partition by name order by name) rn ,
    count(*) over(partition by name) ct
    from tbl_dup
) a
order by ct desc, rn asc
© www.soinside.com 2019 - 2024. All rights reserved.