我有以下 mysql 查询:
SELECT id, sum(views) as total_views
FROM table
WHERE id IN (1,2,3)
GROUP BY id
ORDER BY total_views ASC
If only id 1,3
数据库里找到了,我还想要id 2
出现,与total_views
被设置为 0。
有什么办法可以做到这一点吗?这不能使用任何其他表。
该查询使用由联合组成的子查询对可能的 ID 列表进行硬编码...然后将这组 id 左连接到包含要计数的信息的表。
即使没有出现,这也会在结果中保留 ID:
SELECT ids.id, sum(views) as total_views
FROM (
SELECT 1 AS ID
UNION ALL SELECT 2 AS ID
UNION ALL SELECT 3 AS ID
) ids
LEFT JOIN table
ON table.ID = ids.ID
GROUP BY ids.id
ORDER BY total_views ASC
或者,如果您有数字表 https://stackoverflow.com/questions/9751318/creating-a-numbers-table-in-mysql,您可以执行以下查询:
SELECT numbers.number, sum(views) as total_views
FROM
numbers
LEFT JOIN table
ON table.ID = ids.ID
WHERE numbers.number IN (1, 2, 3)
GROUP BY numbers.number
ORDER BY total_views ASC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)