sql - 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
函数上。
解决方案
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;
推荐阅读
- python - Django:django-allauth 导致“应用程序标签不是唯一的”
- sql - 多个日期之间的差异
- excel - Application.Match 错误说类型不匹配
- r - 如何将向量作为函数的条件?
- c# - .net core HTTPS 请求返回 502 bad gateway 而 Postman 返回 200 OK
- javascript - 我可以使用 apollo federation 来模块化同一服务器上的模式吗?
- emacs - 将 eshell 提示放在另一行
- swift - 如何在根目录下制作两个 Package.swift?
- linux - zsh 中“git stash drop”的别名
- awesome-wm - 将客户端窗口垂直最大化到屏幕的左半边