我有一个用户表和一个分类广告表
我想从表中选择所有用户,并有 2 个计数:- 有效的分类广告(分类广告状态 = 'A'(- 所有分类广告
我尝试了这样的事情:
SELECT u.*, count(c.id) as total_active, COUNT( c2.id ) AS total
FROM `users` u
LEFT join `classifieds` c ON c.user_id=u.id AND c.status = 'A'
LEFT join `classifieds` c2 ON c2.user_id=u.id
GROUP BY u.id
但它没有按预期工作
在 COUNT 中使用 CASE。
ELSE 情况是隐含的 NULL,被COUNT(column)
忽略
SELECT
u.*,
count(CASE WHEN c.status = 'A' THEN c.id END) as total_active,
COUNT(c.id) AS total
FROM
`users` u
LEFT JOIN
`classifieds` c ON c.user_id = u.id
GROUP BY
u.id -- fix this
此外,标准SQL是分组或聚合列:MySQL分组依据扩展可能会给出误导性结果,因为引擎会猜测您想要的内容。
尝试SET SQL_MODE = 'ONLY_FULL_GROUP_BY'
查询,看看我的意思...