Oracle Top Max Count结果Sql查询

时间:2014-08-12 18:04:48

标签: sql oracle subquery

我有一个Oracle查询,它会根据详细信息计算某些内容出现的次数。 它类似于:

SELECT COUNT(1) AS Num_Found, Column_A, Column_B, Column_C
FROM Some_Table
GROUP BY Column_A, Column_B, Column_C   

我得到像这样的结果

|-----------|----------|----------|----------|
| Num_Found | Column_A | Column_B | Column_C |
| 145       | Acct1    | SubAcct1 | XXXX     |
| 6         | Acct1    | SubAcct1 | yyyy     |
| 346       | Acct2    | SubAcct2 | qwert    |
| 97        | Acct2    | SubAcct2 | plkmn    |
|-----------|----------|----------|----------|

我不确定如何根据Num_Found的最大数量获取Column_A,Column_B,Column_C。这样我就可以得到这样的结果:

|-----------|----------|----------|----------|
| Num_Found | Column_A | Column_B | Column_C |
| 145       | Acct1    | SubAcct1 | XXXX     |
| 346       | Acct2    | SubAcct2 | qwert    |
|-----------|----------|----------|----------|

3 个答案:

答案 0 :(得分:1)

您按三列和结果组进行分组,您只希望保留两列中每个组合的最高分数?

可以通过以下方式完成:

select num_found, column_a, column_b, column_c
from (
  SELECT COUNT(*) AS Num_Found, Column_A, Column_B, Column_C
       , row_number() over (
            partition by column_a, column_b
            order by count(*) desc
         ) rn
  FROM Some_Table
  GROUP BY Column_A, Column_B, Column_C
)
where rn = 1

请注意,如果(对于相同的column_a,column_b组合)两个不同的column_c值具有相同的最高计数,那么它将是“随机的”,其中column_c值将在输出中。

答案 1 :(得分:0)

你想这样做吗?

SELECT t.*
FROM (SELECT COUNT(1) AS Num_Found, Column_A, Column_B, Column_C
      FROM Some_Table
      GROUP BY Column_A, Column_B, Column_C 
      ORDER BY COUNT(1) DESC
     ) t
WHERE rownum <= 2 ;

答案 2 :(得分:0)

试试这个。根据您想要的输出,看起来您想要按column_a

对结果进行分区

选择 num_found,column_a,column_b,column_c
 从 ( 选择a。*,max(num_found)over(partition by column_a)为max_num 从  表a) 其中num = max_num