【发布时间】:2020-03-17 15:53:03
【问题描述】:
我正在尝试按状态计算帖子。但是下面的查询给了我这个错误。
错误消息:[42000][1140] 在没有 GROUP BY 的聚合查询中, SELECT 列表的表达式 #1 包含非聚合列 'jquzntys.posts.id';这与 sql_mode=only_full_group_by
SELECT COUNT(p.id) total,
p1.authors authors,
p2.published published,
p3.pending pending,
p4.scheduled scheduled,
p5.draft draft,
p6.deleted deleted
FROM posts p
LEFT JOIN (
SELECT id, COUNT(*) as `authors`
FROM posts
WHERE user_id = ?
) AS p1 ON p1.id = p.id
LEFT JOIN (
SELECT id, COUNT(*) as `published`
FROM posts
WHERE status = ?
) AS p2 ON p2.id = p.id
LEFT JOIN (
SELECT id, COUNT(*) as `pending`
FROM posts
WHERE status = ?
) AS p3 ON p3.id = p.id
LEFT JOIN (
SELECT id, COUNT(*) as `scheduled`
FROM posts
WHERE status = ?
) AS p4 ON p4.id = p.id
LEFT JOIN (
SELECT id, COUNT(*) as `draft`
FROM posts
WHERE status = ?
) AS p5 ON p5.id = p.id
LEFT JOIN (
SELECT id, COUNT(*) as `deleted`
FROM posts
WHERE status = ?
) AS p6 ON p6.id = p.id
没有需要分组的数据。为什么我会收到此错误?
【问题讨论】:
-
因为和sql_mode=only_full_group_by不兼容。
-
count()是一个聚合函数。id列既不分组也不聚合 -
样本数据和期望的结果会有所帮助。