MYSQL计数:从用户中选择ALL,计算有效/总广告数(2个计数)

时间:2011-12-28 06:25:25

标签: mysql count left-join

我有一个用户表和一个分类表

我想从表中选择2个计数的所有用户: - 活跃的分类广告(classifieds.status ='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

但它没有按预期工作

1 个答案:

答案 0 :(得分:6)

在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 GROUP BY扩展可能会产生误导性结果,因为引擎猜测你想要什么。

使用SET SQL_MODE = 'ONLY_FULL_GROUP_BY'尝试此查询,看看我的意思......