我正在尝试仅从以下查询中提取具有最大计数的行:
SELECT FOO, BAR, COUNT(X)
FROM TABLE1, TABLE2, TABLE3
WHERE <CONDITIONS INVOLVING THE 3 TABLES>
GROUP BY FOO, BAR;
生成看起来像的输出 -
FOO | BAR | COUNT(X)
0 String 1 5
1 String 2 3
2 String 3 5
3 String 4 4
4 String 5 5
如您所见,有3行的COUNT(X)值为5.如何编辑此行以仅显示包含MAX(COUNT(X))的行?我正在使用Oracle SQL。
答案 0 :(得分:1)
您可以使用分析功能执行此操作。首先找到每组值的计数,就像你已经存在的那样;然后使用DENSE_RANK()
(或RANK()
或ROW_NUMBER()
)函数根据COUNT()
值为现有结果集中的每一行分配订单;最后只挑选排名最高的那些:
SELECT foo, bar, cnt
FROM (
SELECT foo, bar, cnt,
DENSE_RANK() OVER (ORDER BY cnt DESC) dr
FROM(
SELECT foo, bar, COUNT(x) cnt
FROM ...
GROUP BY foo, bar
)
)
WHERE dr = 1;
请注意DESC
中的ORDER BY
,因此最高COUNT()
的等级为1。
答案 1 :(得分:0)
这应该有效:
SELECT * FROM (
SELECT FOO, BAR, MAX(X) maxX, COUNT(X) cntX
FROM TABLE1, TABLE2, TABLE3
WHERE <CONDITIONS INVOLVING THE 3 TABLES>
GROUP BY FOO, BAR
) A
WHERE maxX = cntX;