【问题标题】:如何在sql [Oracle]中分组并找到最大值[重复]
【发布时间】:2021-12-02 14:31:00
【问题描述】:

我的数据库中有需要分组的数据,并根据频率找到最大值。例如,我想同时选择 ID 和每个 ID 的 NumberOfVisits 最大的国家/地区。

样本数据:

ID Country NumberOfVisits
1 US 5
2 UK 7
1 UAE 10

我期望的输出是:

ID Country
1 UAE
2 UK

【问题讨论】:

  • 在示例数据中,您只需要对应国家/地区的那一行,即拥有最高 NumberOfVisits 的那一行。不需要分组依据
  • 但我有很多 ID,我想为每个 ID 选择 ID 和国家/地区。在这个例子中,我期望的是: 1 |阿联酋 2 |英国

标签: sql oracle greatest-n-per-group


【解决方案1】:

借助一些分析函数(第 1 - 8 行中的示例数据;查询从第 9 行开始):

SQL> WITH
  2     test (id, country, num)
  3     AS
  4        (SELECT 1, 'US', 5 FROM DUAL
  5         UNION ALL
  6         SELECT 2, 'UK', 7 FROM DUAL
  7         UNION ALL
  8         SELECT 1, 'UAE', 10 FROM DUAL),
  9     temp
 10     AS
 11        (SELECT id,
 12                country,
 13                num,
 14                RANK () OVER (PARTITION BY id ORDER BY num DESC) rnk
 15           FROM test)
 16  SELECT id, country, num
 17    FROM temp
 18   WHERE rnk = 1;

        ID COU        NUM
---------- --- ----------
         1 UAE         10
         2 UK           7

SQL>

【讨论】:

    猜你喜欢
    • 2023-01-05
    • 2021-12-18
    • 2021-12-21
    • 2011-01-03
    • 1970-01-01
    • 2023-03-18
    • 2020-06-15
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多