SQL Query获取组的前2条记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Query获取组的前2条记录相关的知识,希望对你有一定的参考价值。

我有一个以下输入表

Source  EventType
A        X
A        X
A        X
A        Y
A        Y
A        Z
B        L
B        L
B        L
B        L
B        M
B        N
B        N

预期产出

Source    EventType   Frequency
A          X            3
A          Y            2
B          L            4
B          N            2

如何形成一个SQL查询来获得如上所示的结果?我能够取得成果,但一次只有一个来源。

select TOP 2 eventype, count(*) as frequencey
from myEventTable 
where source = 'A'
group by eventtype
order by count(*) desc
答案

我们可以在这里使用ROW_NUMBER

WITH cte AS (
    SELECT Source, EventType, COUNT(*) as Frequency,
        ROW_NUMBER() OVER (PARTITION BY Source ORDER BY COUNT(*) DESC) rn
    FROM myEventTable
    GROUP BY Source, Eventtype
)

SELECT Source, EventType, Frequency
FROM cte
WHERE rn <= 2;

enter image description here

Demo

这样做的原因是在ROW_NUMBER操作完成后应用GROUP BY,即它针对组运行。然后我们可以轻松地限制每个源的前2个,按频率下降排序。

以上是关于SQL Query获取组的前2条记录的主要内容,如果未能解决你的问题,请参考以下文章

MySQL分组查询后如何获取每组的前N条数据,你会吗?

oracle开展分组后,取出每组的前几条数据

如何在 SQL 中获取每组的最后一条记录

MySQL取每组的前N条记录

Sql 获取满足给定汇总值的前N条记录

mysql分组后,取每组的前3条数据(并且有顺序)