在 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)
以下查询成功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)