【问题标题】:Oracle Top Max Count Results Sql QueryOracle Top Max Count 结果 Sql 查询
【发布时间】:2014-08-12 18:04:48
【问题描述】:

我有一个 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    |
|-----------|----------|----------|----------|

【问题讨论】:

  • 只是为了让我们清楚一点,我想做的是获取 Column_A 和 Column_B 的最大计数,以便我可以在其他地方使用 Column_C。在我的原始查询中,我可能有 10 行 Column_A = Acct1 和 Column_B = SubAcct1,但所有 Column_C 结果都不同。所以我需要找到Column_A和Column_B最常见的结果

标签: sql oracle subquery


【解决方案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 值将是“随机的”。

【讨论】:

    【解决方案2】:

    试试这个。根据您想要的输出,看起来您想按 column_a 对结果进行分区

    选择 num_found、column_a、column_b、column_c
    从 ( 选择 a.* , max(num_found) over (partition by column_a) as max_num 从 表一) 其中 num=max_num

    【讨论】:

      【解决方案3】:

      你想这样做吗?

      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 ;
      

      【讨论】:

      • 没有。因为那只会给我前两行。我要做的是获取 Column_A 和 Column_B 的最大计数,以便我可以在其他地方使用 Column_C。
      猜你喜欢
      • 2012-12-26
      • 2011-12-11
      • 2020-10-07
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      相关资源
      最近更新 更多