在 WHERE 子句后无效使用 GROUP BY 运算符

Invalid use of GROUP BY operator after WHERE clause

以下查询成功returns打印最多的特定用户(按id):

SELECT file_prints.user_id, user.major, sum(print_pages) FROM `file_prints`
INNER JOIN `user` on file_prints.user_id = user.user_id GROUP BY
file_prints.user_id 
ORDER BY sum(print_pages)

当我引入一个 where 子句试图消除根本没有打印的用户时(也就是说,where sum(print_pages) == 0),我编写了以下查询:

SELECT file_prints.user_id, user.major, sum(print_pages) FROM `file_prints`
INNER JOIN `user` on file_prints.user_id = user.user_id WHERE
sum(print_pages) > 0 GROUP BY file_prints.user_id 
ORDER BY sum(print_pages)

并得到以下错误:

 #1111 - Invalid use of group function 

如何消除 sum(print_pages) 为 0 的结果?

您在处理聚合时需要使用 having 关键字:

SELECT file_prints.user_id, user.major, sum(print_pages) FROM `file_prints`
INNER JOIN `user` on file_prints.user_id = user.user_id 
GROUP BY file_prints.user_id 
HAVING sum(print_pages) > 0 
ORDER BY sum(print_pages)

这是因为您不能在 WHERE 子句中使用聚合函数。所以,像这样使用 HAVING 子句:

SELECT file_prints.user_id, user.major, sum(print_pages) 
FROM `file_prints`
INNER JOIN `user` on file_prints.user_id = user.user_id
GROUP BY file_prints.user_id
HAVING sum(print_pages) > 0 
ORDER BY sum(print_pages)