[英]how to combine these two results as one in mysql?
我有这样的查询,
SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_receiver_id = b.user_id
AND a.email_sender_id= 20
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id
UNION
SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_sender_id = b.user_id
AND a.email_receiver_id= 20
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id;
其输出是-
user_id first_name last_name email_id sharedFiles
17 Mohan Sharma mohan.guptademo@gmail.com 2
17 Mohan Sharma mohan.guptademo@gmail.com 1
它显示了两个不同的记录。 但我想要这样的输出-
user_id first_name last_name email_id sharedFiles
17 Mohan Sharma mohan.guptademo@gmail.com 3
我是mysql的新手,所以请帮助我如何获取此输出。
谢谢。
将您的查询用作子查询可以进行其他分组和汇总。 查看以下查询:
SELECT (b.user_id,b.first_name, b.last_name, b.email_id, SUM(b.sharedFiles)
FROM (
SELECT b.user_id,b.first_name, b.last_name, b.email_id, COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_receiver_id = b.user_id
AND a.email_sender_id= 20
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id UNION
UNION
SELECT b.user_id,b.first_name, b.last_name, b.email_id, COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_sender_id = b.user_id
AND a.email_receiver_id= 20
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id;
) AS b
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id
SELECT b.user_id,b.first_name, b.last_name, b.email_id, SUM(sharedFiles)as sharedFiles
FROM(
SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_receiver_id = b.user_id
AND a.email_sender_id= 20
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id
UNION
SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_sender_id = b.user_id
AND a.email_receiver_id= 20
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id)x
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id;
管理UNION结果的一般解决方案是将其放在子查询中,并在外部函数中进行分组,如下所示:
SELECT t.user_id, t.first_name, t.last_name, t.email_id, SUM(t.sharedFiles)
FROM
(SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_receiver_id = b.user_id
AND a.email_sender_id= 20
UNION
SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE a.email_sender_id = b.user_id
AND a.email_receiver_id=20) t
GROUP BY t.user_id;
但是,看来您的精确请求可以放在带有OR的单个查询中。
SELECT b.user_id,b.first_name, b.last_name, b.email_id,
COUNT(DISTINCT a.file_id) AS sharedFiles
FROM email_history a, users b
WHERE (a.email_receiver_id = b.user_id
AND a.email_sender_id= 20) OR (a.email_sender_id = b.user_id
AND a.email_receiver_id= 20)
GROUP BY b.user_id,b.first_name, b.last_name, b.email_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.