[英]SQL group by, what am I doing wrong?
情况如下:
查找平均大学入学率排名前 5 位的社区区域。
数据库存储为 SCHOOLS。
%sql SELECT COLLEGE_ENROLLMENT, COMMUNITY_AREA_NAME FROM SCHOOLS GROUP BY COLLEGE_ENROLLMENT;
我知道这会给我社区的大学入学率,但我收到以下错误消息:
(ibm_db_dbi.ProgrammingError) ibm_db_dbi::ProgrammingError: Exception('SQLNumResultCols failed: [IBM][CLI Driver][DB2/LINUXX8664] SQL0119N 在 SELECT 子句、HAVING 子句或 ORDER BY 子句中指定的以“COMMUNITY_AREA_NAME”开头的表达式是未在 GROUP BY 子句中指定,或者它在 SELECT 子句、HAVING 子句或带有列 function 的 ORDER BY 子句中,但未指定 GROUP BY 子句。SQLSTATE=42803\r SQLCODE=-119')
谁能告诉我我在这里做错了什么?
谢谢!
使用GROUP BY
时,您在SELECT
子句之后放置的任何内容都必须在GROUP BY
子句或聚合 function 中使用,例如SUM()
。 在您的情况下,您需要将COMMUNITY_AREA_NAME
放在GROUP BY
子句中或将其从SELECT
子句中删除,以消除 go 的错误。 也就是说,我不认为这个查询是你想要的——我会做这样的事情:
SELECT COMMUNITY_AREA_NAME, SUM(COLLEGE_ENROLLMENT) AS TOTAL_ENROLLED FROM SCHOOLS GROUP BY COMMUNITY_AREA_NAME, ORDER BY TOTAL_ENROLLED DESC;
解释:
SUM(COLLEGE_ENROLLMENT)
:将单个COMMUNITY_AREA_NAME
中所有学校的入学人数加起来。AS TOTAL_ENROLLED
:为 SUM() 的结果命名,以便我们稍后可以在ORDER BY
子句中轻松引用它。ORDER BY TOTAL_ENROLLED DESC
:按 TOTAL_ENROLLED 对TOTAL_ENROLLED
进行排序,并将最大的数字放在顶部。尝试以下它应该工作。
Find the top 5 Community Areas by average College Enrollment.
SELECT
COMMUNITY_AREA_NAME,
AVG(COLLEGE_ENROLLMENT) AS AVG_ENROLL
FROM SCHOOLS
GROUP BY
COMMUNITY_AREA_NAME
ORDER BY
AVG(COLLEGE_ENROLLMENT) DESC
LIMIT 5
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.