[英]SQL Server query + joining results
I have a query like this: 我有这样的查询:
SELECT recipientid AS ID,
COUNT(*) AS Recieved FROM Inbox
GROUP BY recipientid
UNION
SELECT SenderId,
COUNT(*) AS [Sent] FROM Inbox
GROUP BY SenderId
The output: 输出:
RecipientID Recieved
001 3
001 4
002 4
002 2
003 18
003 55
How can I rewrite is such a way that it displays like this: 我该如何重写,因此显示如下:
RecipientID Recieved Sent
001 3 4
002 4 2
003 18 55
Thanks. 谢谢。
Just join the subqueries: 只需加入子查询:
select a.ID,Received,Sent
from(
SELECT recipientid AS ID,
COUNT(*) AS Recieved FROM Inbox
GROUP BY recipientid
)a
full outer join(
SELECT SenderId as ID,
COUNT(*) AS [Sent] FROM Inbox
GROUP BY SenderId
)b
on (a.ID = b.ID)
order by a.ID;
Note that this grabs all of the sent
and received
values for any recipients or senders. 请注意,这
sent
获取所有收件人或发件人的所有已sent
和已received
值。 If you only want results for ID
s belonging to recipients and senders, then do an inner join
. 如果您只想要
ID
属于接收者和发送者的结果,请执行一个inner join
。
I would add a source
column to your query and do a simple pivot 我将
source
列添加到您的查询并做一个简单的枢轴
select ID,
max (case when source=1 then Cnt else 0 end) as Received,
max (case when source=2 then Cnt else 0 end) as Sent
from (
SELECT 1 as Source,
recipientid AS ID,
COUNT(*) AS Cnt
FROM Inbox
GROUP BY recipientid
UNION
SELECT 2 as Source,
SenderId,
COUNT(*)
FROM Inbox
GROUP BY SenderId
) x
GROUP BY ID
If it's Postgres, MS SQL or others that support CTEs - 如果是Postgres,MS SQL或其他支持CTE的人-
With Both as
(
SELECT
recipientid AS ID,
Count(*) AS Recieved,
0 as [Sent]
FROM Inbox
GROUP BY recipientid
UNION
SELECT
SenderId as ID,
0 as Recieved,
Count(*) AS [Sent]
FROM Inbox
GROUP BY SenderId
)
SELECT
ID,
Sum(Received) as [Received],
Sum(Sent) as [Sent]
FROM BOTH
GROUP BY ID
ORDER BY 1
Assuming you have a users
table with the IDs, you could do something like: 假设您有一个包含ID的
users
表,则可以执行以下操作:
SELECT
users.id,
COUNT(sent.senderid) AS sent,
COUNT(received.recipientid) AS received
FROM
users
LEFT JOIN inbox AS sent ON sent.senderid = users.id
LEFT JOIN inbox AS received ON received.recipientid = users.id
GROUP BY sent.senderid, received.recipientid
ORDER BY users.id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.