繁体   English   中英

如何将这两个结果合并为mysql中的一个?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM