DS_*_*per 4 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
Run Code Online (Sandbox Code Playgroud)
但它没有按预期工作
在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
Run Code Online (Sandbox Code Playgroud)
此外,标准SQL要么分组或聚合列:MySQL GROUP BY扩展可能会产生误导性结果,因为引擎会猜到你想要的东西.
试试这个查询,SET SQL_MODE = 'ONLY_FULL_GROUP_BY'看看我的意思......
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |