[英]SQL - Displaying 3 different counts on one query
这三个查询各自独立工作。 但是,我希望所有三个COUNTS都显示在同一查询中。 它们相同,除了WHERE语句中的细微差别。
/* Display Total Message Count */
SELECT People.Name, COUNT(Messages.SenderID) as "Total Messages Sent"
FROM Ballers.Messages JOIN Ballers.People
WHERE Messages.SenderID = People.ID
GROUP BY People.Name;
/* Display Text Message Count */
SELECT People.Name, COUNT(Messages.SenderID) as "Text Messages Sent"
FROM Ballers.Messages JOIN Ballers.People
WHERE Messages.SenderID = People.ID AND Type = "Text"
GROUP BY People.Name;
/* Display Picture Message Count */
SELECT People.Name, COUNT(Messages.SenderID) as "Picture Messages Sent"
FROM Ballers.Messages JOIN Ballers.People
WHERE Messages.SenderID = People.ID AND Type = "Picture"
GROUP BY People.Name;
我在同一表上输出所有三个查询都没有成功。 我尝试了很多不同的方法,但是都给了我错误。 我对SQL还是很陌生,但我还没有完全掌握一切的工作原理。 这是失败代码的一个示例:
/* Display All Message Counts, 3 Queries In One */
SELECT
People.Name,
(COUNT(Messages.SenderID) as "Messages Sent"
WHERE Messages.SenderID = People.ID),
(COUNT(Messages.SenderID) as "Text Messages Sent"
WHERE Messages.SenderID = People.ID AND Type = "Text"),
(COUNT(Messages.SenderID) as "Picture Messages Sent"
WHERE Messages.SenderID = People.ID AND Type = "Picture")
FROM Ballers.Messages JOIN Ballers.People
GROUP BY People.Name;
尚未对此进行测试,但应遵循以下原则:
SELECT People.Name,
COUNT(*) AS AllMessages,
SUM(CASE WHEN Type='Text' THEN 1 ELSE 0 END) AS TextMessages,
SUM(CASE WHEN Type='Picture' THEN 1 ELSE 0 END) AS PictureMessages
FROM Ballers.Messages JOIN Ballers.People ON People.ID=Messages.SenderID
GROUP BY People.Name
您可以尝试这样的事情:
SELECT
`People1`.`Name`,
COUNT(`Messages1`.`SenderId`) as `TotalMessagesSent`,
COUNT(`Messages2`.`SenderId`) as `TextMessagesSent`,
COUNT(`Messages3`.`SenderId`) as `PictureMessagesSent`
FROM
`Messages` as `Messages1`
JOIN `People` as `People1` ON (`Messages1`.`SenderId` = `People1`.`ID`),
`Messages` as `Messages2`
JOIN `People` as `People2` ON (`Messages2`.`SenderId` = `People2`.`ID` AND `Type`='Text'),
`Messages` as `Messages3`
JOIN `People` as `People3` ON (`Messages3.`SenderId` = `People3`.`ID` AND `Type`='Pictures')
GROUP BY
`People1`.`Name`
或仅从人员表中选择并加入消息:
SELECT
`People`.`Name`,
COUNT(`Messages1`.`SenderId`) as `TotalMessagesSent`,
COUNT(`Messages2`.`SenderId`) as `TextMessagesSent`,
COUNT(`Messages3`.`SenderId`) as `PictureMessagesSent`
FROM
`People`
JOIN `Messages` as `Messages1` ON (`Messages1`.`SenderId` = `People`.`ID`)
JOIN `Messages` as `Messages2` ON (`Messages2`.`SenderId` = `People`.`ID` AND `Type`='Text')
JOIN `Messages` as `Messages3` ON (`Messages3.`SenderId` = `People`.`ID` AND `Type`='Pictures')
GROUP BY
`People`.`Name`
也许它不完整,没有经过测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.