我想计算字段 status
等于 1
的行,仅对于 UNION
之前的一个子查询:
SELECT sender, login, sex, avatar, status,
SUM(case when status = 1 AND receiver = 1 then 1 else 0 end) AS unread_messages
FROM messages
LEFT JOIN users
ON users.idUser = messages.sender
WHERE receiver = 1
它工作正常,但是当我为第一个查询添加 UNION
时:
... UNION SELECT receiver, login, sex, avatar, status, idMessage
FROM messages
LEFT JOIN users
ON users.idUser = messages.receiver
WHERE sender = 1
GROUP BY receiver, sender
它打破了计数的结果。因此,对于 receiver
我尝试添加附加条件:
case when (status = 1 and receiver = 1)
最佳答案
您的第一个和第二个 SELECT
具有不同的字段。
您必须在两者中添加字段:
首先选择:
SELECT sender, login, sex, avatar, status, null idMessage
SUM(case when status = 1 AND receiver = 1
then 1 else 0 end) AS unread_messages
第二次选择:
SELECT receiver, login, sex, avatar, status, idMessage, null unread_messages
关于mysql - 如何使用 UNION 对字段求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37231322/