sql – 从Group获取最大计数
发布时间:2020-12-12 07:27:14 所属栏目:MsSql教程 来源:网络整理
导读:我很难在sql中获取组函数的输出.Below是表的详细信息 我有1个表的名称“检查”有2列pid,cid Name Null? Type ----------------------------------------- -------- ---------------------------- PID VARCHAR2(20) CID VARCHAR2(20) 以下是可用的行 select *
我很难在sql中获取组函数的输出.Below是表的详细信息
我有1个表的名称“检查”有2列pid,cid Name Null? Type ----------------------------------------- -------- ---------------------------- PID VARCHAR2(20) CID VARCHAR2(20) 以下是可用的行 select * from checks; PID CID -------------------- -------------------- p1 c1 p1 c1 p1 c2 p1 c2 p1 c2 p2 c1 p2 c1 p2 c1 p2 c1 p2 c1 p2 c1 p2 c2 p2 c2 p2 c2 p2 c2 p2 c2 P代表参与者,c代表类别 题 我需要知道哪个参与者参与哪个类别参与者最多参与哪个类别(对于每个参与者) 预期结果: pid cid count(cid) --- --- ----------- p1 c2 3 p2 c1 6 解决方法假设一个支持窗口函数和CTE的数据库系统(你没有指定一个,但我怀疑是Oracle?),我会写:;With Groups as ( select pid,cid,COUNT(*) as cnt from checks group by pid,cid ),Ordered as ( select pid,cnt,ROW_NUMBER() OVER (PARTITION BY pid ORDER BY cnt desc) as rn,COUNT(*) OVER (PARTITION BY pid) as multi from Groups ) select pid,cnt from Ordered where rn = 1 and multi > 1 第一个CTE(组)只查找每个唯一cid,pid组合的计数.第二个CTE(Ordered)根据计数为这些结果分配行号 – 最高计数分配行数1.我们还计算每个pid生成的总行数. 最后,我们选择那些被分配了行号1(最高计数)的行,并为此我们获得了同一个pid的多个结果. 这是一个Oracle fiddle玩.这是一个SQL Server version(感谢Andriy M生产Oracle的一个) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |