小编dze*_*kob的帖子

GROUP BY 子句中的条件选择

我是一个 SQL 初学者,遇到了以下问题。考虑一个包含国家、该国家内的城市及其人口数据的表格:

CREATE TABLE cities (
    country VARCHAR(20),
    city VARCHAR(20),
    population INT
);

INSERT INTO cities VALUES
   ('Italy', 'Milano', 1000000), 
   ('Italy', 'Rome', 2000000), 
   ('Italy', 'Bologna', 800000), 
   ('Poland', 'Warszawa', 1000000), 
   ('Poland', 'Wroclaw', 700000);
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,返回国家/地区名称及其最大城市的人口和城市名称本身。前两个字段使用 很简单GROUP BY。但是,我不知道如何包含最大城市的名称。我试过:

SELECT 
    country, MAX(population), city
FROM
    cities
WHERE
    population = (SELECT 
            MAX(population)
        FROM
            cities
        )
GROUP BY country, city;
Run Code Online (Sandbox Code Playgroud)

但这只选择了一项记录(有关罗马的记录)。我希望查询为每个国家/地区组返回一条记录,即本例中为罗马和华沙。条件WHERE不能是:

population = (SELECT 
            MAX(population)
        FROM
            cities
        GROUP BY country)
Run Code Online (Sandbox Code Playgroud)

因为这样子查询返回两行,导致主查询中出现错误1242。

mysql group-by greatest-n-per-group mysql-8.0

2
推荐指数
1
解决办法
589
查看次数

标签 统计

greatest-n-per-group ×1

group-by ×1

mysql ×1

mysql-8.0 ×1