如何使用 SQL 获取出现次数最多的行
How to get rows having maximum occurrence using SQL
我有一个参与者table:
我写了一个 CTE,它给出了以下 table:
CTE代码:
with cte as
(
select t.per1,t.per2,t.met1,concat(t.per1,t.per2) concated from
(
select p1.person_id per1, p1.meeting_id met1, p2.person_id per2 from participant p1 cross join participant p2
where p1.meeting_id=p2.meeting_id and p1.person_id<>p2.person_id
)t
where t.per1<t.per2
--order by t.per1,t.per2
)
现在我想从此 cte 中获取连接数最大的行。即 我想要行
Per1 Per2 Met1 Concated
1 2 10 12
1 2 20 12
1 2 30 12
因为 concated=12 出现最大次数
我怎样才能达到同样的效果?我尝试使用 count 和 group by 但无法 return Per1、Per2 和 Met1 一起使用。
提前致谢。
我们可以在最里面的查询中使用 COUNT()
分析来查找会议参加者对的计数:
WITH cte AS (
SELECT p1.person_id per1, p1.meeting_id met, p2.person_id per2,
COUNT(*) OVER (PARTITION BY p1.person_id, p2.person_id) cnt
FROM participant p1
INNER JOIN participant p2
ON p1.meeting_id = p2.meeting_id AND p1.person_id < p2.person_id
)
SELECT TOP 1 WITH TIES met, per1, per2
FROM cte
ORDER BY RANK() OVER (ORDER BY cnt DESC);
我有一个参与者table:
我写了一个 CTE,它给出了以下 table:
CTE代码:
with cte as
(
select t.per1,t.per2,t.met1,concat(t.per1,t.per2) concated from
(
select p1.person_id per1, p1.meeting_id met1, p2.person_id per2 from participant p1 cross join participant p2
where p1.meeting_id=p2.meeting_id and p1.person_id<>p2.person_id
)t
where t.per1<t.per2
--order by t.per1,t.per2
)
现在我想从此 cte 中获取连接数最大的行。即 我想要行
Per1 Per2 Met1 Concated
1 2 10 12
1 2 20 12
1 2 30 12
因为 concated=12 出现最大次数
我怎样才能达到同样的效果?我尝试使用 count 和 group by 但无法 return Per1、Per2 和 Met1 一起使用。
提前致谢。
我们可以在最里面的查询中使用 COUNT()
分析来查找会议参加者对的计数:
WITH cte AS (
SELECT p1.person_id per1, p1.meeting_id met, p2.person_id per2,
COUNT(*) OVER (PARTITION BY p1.person_id, p2.person_id) cnt
FROM participant p1
INNER JOIN participant p2
ON p1.meeting_id = p2.meeting_id AND p1.person_id < p2.person_id
)
SELECT TOP 1 WITH TIES met, per1, per2
FROM cte
ORDER BY RANK() OVER (ORDER BY cnt DESC);