繁体   English   中英

SQL group by,我做错了什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM