mysql - 如何使用 UNION 对字段求和?

标签 mysql sql

我想计算字段 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/

相关文章:

mysql - 我有一个数据库。如何创建使用两个表中的信息的触发器?

mysql - 处理 Sphinx 结果中的星号

php - 如何正确使用parseJSON?

java - Spring Data JPA - 不带参数的查询

sql - 可视化正在使用什么sql语句

sql - 微软 Access : why isn't my query from an unrelated table working?

php - 如何将 PHPExcel 生成的文件从 PHP 页面传递到另一个 PHP 页面?

sql - Oracle To_Char函数如果已经是字符串怎么处理

sql - 每月随机选择 1-3 个值

SQL Server 使用多对多相关表连接行