我的桌子如下:
cust_ref | account_num
123456 | 001132
321234 | 123213
325123 | 412312
123456 | 312321
我基本上想做的是将重复的cust_ref行排序在一起,并对其进行排序,以便所有重复项都从第1行开始按降序排列。即如果有一个cust_ref编号对应于3个account_num,那么它将在cust_ref的较高行中对应于2个account_num
例如
cust_ref | account_num
123456 | 001132
123456 | 312321
321234 | 123213
325123 | 412312
我当前的查询是:
select cust_ref,
account_num
from (
select cust_ref,
account_num,
max(phone_num)
from table_name
group by cust_ref, account_num
)
答案 0 :(得分:1)
Pham的答案比这更好,但是,如果您想在老派上做,类似的事情应该可以
declare @cust_accts table
(
cust_ref int NOT NULL,
account_num int not null
)
insert into @cust_accts values (123456 , 001132)
insert into @cust_accts values (321234 , 123213)
insert into @cust_accts values (325123 , 412312)
insert into @cust_accts values (123456 , 312321)
select a.cust_ref,
a.account_num,
b.acct_cnt
from @cust_accts a
join
(
select cust_ref, count(*) as acct_cnt
from @cust_accts
group by cust_ref
) b
on a.cust_ref = b.cust_ref
order by b.acct_cnt, a.cust_ref, a.account_num
不确定我的答案显示为何比范姆高,他的优雅得多。
答案 1 :(得分:0)
如果RDBMS支持 li:first-child:nth-last-child(8),
li:first-child:nth-last-child(8) ~ li{
background-color: $primary-accent;
color: white;
padding: 10px;
border: 1px solid white;
}
,则可以使用以下方法:
window functions (analytic functions)
中进行了测试
如果您也想在SELECT
SUM(COUNT(*)) OVER (PARTITION BY cust_ref) AS cnt,
cust_ref, account_num,
MAX(phone_num) AS max_phone_num
FROM table_name
GROUP BY cust_ref, account_num
ORDER BY 1 DESC, 2, 3; --cnt DESC, cust_ref, account_num
的每组中订购,请使用以下方法:
cust_ref, account_num
答案 2 :(得分:0)
您似乎想要:
select cust_ref, account_num
from t
order by count(*) over (partition by cust_ref) desc,
cust_ref,
account_num;
您也可以将计数包括在所需结果中,但是样本结果仅包括两个指定的列。
如果您的数据库不支持窗口功能,则也可以在其中使用子查询。