Oracle Top Max Count结果Sql查询
我有一个Oracle查询,它计算某些内容出现的次数以及按详细信息分组的次数。 与此类似:Oracle Top Max Count结果Sql查询,sql,oracle,subquery,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
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_的最大计数获取列A、列B、列C。这样我就可以得到这样的结果:
|-----------|----------|----------|----------|
| Num_Found | Column_A | Column_B | Column_C |
| 145 | Acct1 | SubAcct1 | XXXX |
| 346 | Acct2 | SubAcct2 | qwert |
|-----------|----------|----------|----------|
你想这么做吗
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 ;
您按三列进行分组,并且在结果组中,您只希望保留两列组合中计数最高的一列 可以通过以下方式完成:
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
请注意,如果对于相同的列a、列b组合,两个不同的列c值具有相同的最高计数,那么输出中的列c值将是随机的。试试这个。根据您想要的输出,看起来您想要按列a对结果进行分区 挑选 找到数量,列a,列b,列c 从…起 按列aas max\u num选择在分区上找到的*maxnum 从…起 表a
其中num=max_num否。因为这只会给我最上面的两行。我想做的是获取列A和列B的最大计数,这样我就可以在其他地方使用列C。只是为了让我们清楚一点,我想做的是获取列A和列B的最大计数,这样我就可以在其他地方使用列C。在我最初的查询中,我可能有十行,列_A=Acct1,列_B=SubAcct1,但所有列的结果都不同。所以我需要找到列A和列B最常见的结果