繁体   English   中英

在使用另一个GROUP BY时选择具有MAX值的行

[英]Select Row with MAX value while using another GROUP BY

我是学习SQL的新手,所以我事先道歉,我的问题很基本。

我想要做的是显示一列,该列将告诉我在已区分的“ old_country”和“ young_country”组中,percent_aged_over_60值最高和最低的国家:

SELECT
    CASE
        WHEN percent_aged_over_60 >= 10 THEN "old_country"
        WHEN percent_aged_over_60 < 10 THEN "young_country"
        ELSE "error"
    END AS "oldness",
COUNT(*)
FROM countries_by_population
    GROUP BY oldness;

换句话说,我要添加一列,以告诉我该国家的名称,其中“ old_country”为MAX(percent_aged_over_60),而“ young_country”则为MIN(percent_aged_over_60)。

虽然我确信这是最简单的两个独立查询,但我想在同一查询中执行。

因此,我正在寻找一个产生三列的结果-年龄,计数(*)和国家。

使用此查询:

select t.country,t.oldness,count(*) from
(SELECT
 CASE
        WHEN percent_aged_over_60 >= 10 THEN "old_country"
        WHEN percent_aged_over_60 < 10 THEN "young_country"
        ELSE "error"
 END AS oldness
 , country
  ,*
 FROM countries_by_population) as t
 GROUP BY t.oldness,t.country;

使用子查询来获取最小和最大百分比,然后将其与表结合起来以获取匹配它们的国家/地区。

SELECT country,
        CASE
            WHEN percent_aged_over_60 >= 10 THEN "old_country"
            ELSE "young_country"
        END AS oldness,
        percent_aged_over_60
FROM countries_by_population
JOIN (SELECT MAX(percent_aged_over_60) AS max_pct, MIN(percent_aged_over_60) AS min_pct
      FROM countries_by_population) AS x
ON percent_aged_over_60 >= 10 AND percent_aged_over_60 = max_pct
    OR percent_aged_over_60 < 10 AND percent_aged_over_60 = min_pct

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM