首页 > 解决方案 > SQL 不能在 CASE 条件下使用 AVG

问题描述

大家好,我想知道是否有人可以帮助我理解我做错了什么,当表中有 100 行时,此查询仅返回一行:

SELECT country, population, CASE
  WHEN population > AVG(population) THEN "Above average Population"
  ELSE "Below average Population"
  END as "population_avg_status"
FROM countries_by_population;

我注意到,如果我改变AVG(population)实际值,AVG(population)我会得到 100 行,所以我猜问题出在AVG函数上。

标签: sql

解决方案


AVG是一个聚合函数,当使用不带GROUP BY子句的聚合函数时,它会导致结果在所有行上聚合。这就是为什么您的输出中只有一行。要解决此问题,请计算子查询中的平均值:

SELECT country, 
       population, 
       CASE WHEN population > (SELECT AVG(population) FROM countries_by_population) THEN "Above average Population"
            ELSE "Below average Population"
       END as population_avg_status
FROM countries_by_population;

推荐阅读