【问题标题】:Get highest value ID获取最高值 ID
【发布时间】:2021-12-27 15:38:02
【问题描述】:

我需要打印区域 ID 和他持有的国家/地区数量,但仅限于最高的国家/地区。

我的桌子是这样的:

COUNTRY_ID        COUNTRY_NAME     REGION_ID
AR                Argentina           2
AU                Belgium             3
BE                Brazil              1
BR                Canada              2
CA                Switzerland         2
CN                China               1
DE                Germany             3

结果一定是这样的:

REGION_ID      Quantity
   2              3

【问题讨论】:

  • 好的,你试过什么?你熟悉 GROUP BY 吗?仔细阅读

标签: sql oracle sql-limit


【解决方案1】:

您可以为此目的使用下面的 sql。 我使用 row_number 分析函数对按 REGION_ID 列分组后的行进行排名。然后,我通过 rnb = 1 过滤得到最大数量的行。

select REGION_ID, QUANTITY
from (
    select t.REGION_ID, count(*)quantity, row_number()over(order by count(*) desc) rnb
    from YourTable t
    group by t.REGION_ID
)
where rnb = 1

demo

【讨论】:

    【解决方案2】:

    从 Oracle 12c 开始,您可以使用:

    SELECT region_id,
           COUNT(*) AS quantity
    FROM   table_name
    GROUP BY region_id
    ORDER BY quantity DESC
    FETCH FIRST ROW ONLY;
    

    在那之前:

    SELECT *
    FROM   (
      SELECT REGION_ID,
             COUNT(*) AS quantity
      FROM   table_name
      GROUP BY region_id
      ORDER BY quantity DESC
    )
    WHERE  ROWNUM = 1;
    

    其中,对于您的示例数据:

    CREATE TABLE table_name (COUNTRY_ID, COUNTRY_NAME, REGION_ID) AS
    SELECT 'AR', 'Argentina',   2 FROM DUAL UNION ALL
    SELECT 'AU', 'Belgium',     3 FROM DUAL UNION ALL
    SELECT 'BE', 'Brazil',      1 FROM DUAL UNION ALL
    SELECT 'BR', 'Canada',      2 FROM DUAL UNION ALL
    SELECT 'CA', 'Switzerland', 2 FROM DUAL UNION ALL
    SELECT 'CN', 'China',       1 FROM DUAL UNION ALL
    SELECT 'DE', 'Germany',     3 FROM DUAL;
    

    两个输出:

    REGION_ID QUANTITY
    2 3

    db小提琴here

    【讨论】:

      【解决方案3】:

      在 Oracle 中,您可以嵌套聚合函数来计算 group by 结果的总数。所以你可以使用last聚合函数来获取最高id:

      select
        max(region_id) keep(
          dense_rank last
          /*
            region_id for highest count(*)
            calculated per region_id
          */
          order by count(*) asc
        ) as region_id,
        max(count(*)) as quantity
      from table_name
      group by region_id
      
      区域 ID |数量 --------: | --------: 2 | 3

      db小提琴here

      【讨论】:

        猜你喜欢
        • 2019-07-01
        • 1970-01-01
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2020-03-18
        • 2016-01-04
        • 1970-01-01
        相关资源
        最近更新 更多