MySQL GROUP BY-选择列匹配的聚合函数(无联接)?

时间:2019-05-20 19:43:19

标签: mysql group-by aggregate-functions

我已经针对MySQL良好的旧world数据库编写了以下SQL查询:

SELECT Continent, Region, Name, MAX(SurfaceArea) 
FROM world.country 
GROUP BY Continent, Region;

country表看起来像这样:

| Code  | Name          | Continent | Region                      | SurfaceArea | ...
| 'AFG' | 'Afghanistan' | 'Asia'    | 'Southern and Central Asia' | 652090.00   |
| 'ALB' | 'Albania'     | 'Europe'  | 'Southern Europe'           |'28748.00'   |
...

我上面的查询在MySQL InnoDb v5.7.26中有效,并且根据MAX(SurfaceArea)Continent发出正确的Region。但是,发出的Name是不正确的,因为它不是表面积最大的国家的名称。

例如,请注意此处的United Arab Emirates行:

| Continent | Region         | Name                   | MAX(SurfaceArea) |
| 'Asia'    | 'Eastern Asia' | 'China'                | '9572900.00'     |
| 'Asia'    | 'Middle East'  | 'United Arab Emirates' | '2149690.00'     |
...

这是因为选择不属于GROUP BY子句的非聚合,非文字列没有太大意义。我相信MySQL会随意将其默认值设为该组中遇到的第一个值。

我的问题是-如何正确编写上述查询,最好不使用JOIN

也就是说,返回一个表格,其中包含国家的Name和{{1},每个SurfaceAreaMAX(SurfaceArea)的{​​{1}}。

0 个答案:

没有答案