仅显示具有最大计数值的行

时间:2011-09-11 09:23:18

标签: sql oracle oracle10g

我正在尝试仅从以下查询中提取具有最大计数的行:

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。

2 个答案:

答案 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;