我有以下 mysql 查询:
SELECT id, sum(views) as total_views
FROM table
WHERE id IN (1,2,3)
GROUP BY id
ORDER BY total_views ASC
如果在数据库中只找到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
或者,如果您有一个 numbers table ,您可以执行以下查询:
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
关于mysql - 将所有记录保留在 "WHERE IN()"子句中,即使找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483448/