我将尝试解释我的问题。我在确定如何命名时遇到了问题,希望您能从说明中得到它。
我有一张桌子。有3个重要的列,与其他列打扰并不重要。
投票者,投票者和评分
我需要得到3个结果(计数)。
1)我需要统计给我评分为1的所有人员的数量,但我没有投票给他们,或者我给他们评分为0。
2)我给评分1但没有投票支持我或给我评分0的所有人的总数。
3)给予我评分的人数也给他们评分1。
感谢您的帮助。
最佳答案
为简单起见,我假设您不需要在一个查询中执行此操作。如果这样做,那么无论如何都将不得不将它们组合为子查询。相反,为了使事情复杂一些,我假设您可能想一次为所有用户提取这些统计信息。
我已经为模式编写了这些查询
Voter ( VoterID, Name )
Rating ( VoterID, VotedOnID, Rating )
我在SQLFiddle上测试了它们
1)我需要统计给我评分为1的所有人员的数量,但我没有投票给他们,或者我给他们评分为0。
SELECT v.Name, COUNT(s.VoterID) AS "They vote 1, you vote 0 or null"
FROM Voter v
LEFT JOIN (
SELECT a.VoterID, a.VotedOnID
FROM Rating a
LEFT JOIN Rating b ON a.VotedOnID = b.VoterID
AND b.VotedOnID = a.VoterID
WHERE a.Rating = 1
AND (b.Rating IS NULL OR b.Rating = 0)
) s ON v.VoterID = s.VotedOnID
GROUP BY v.VoterID, v.Name;
2)我给评分1但没有投票支持我或给我评分0的所有人的总数。
SELECT v.Name, COUNT(s.VoterID) AS "You vote 1, they vote 0 or null"
FROM Voter v
LEFT JOIN (
SELECT a.VoterID, a.VotedOnID
FROM Rating a
LEFT JOIN Rating b ON a.VotedOnID = b.VoterID
AND b.VotedOnID = a.VoterID
WHERE a.Rating = 1
AND (b.Rating IS NULL OR b.Rating = 0)
) s ON v.VoterID = s.VoterID
GROUP BY v.VoterID, v.Name;
N.B.除了最终的
ON
条件之外,这与上面的查询完全相同。3)给予我[1分]评分的人数,我也给了我1级。
SELECT v.Name, COUNT(b.VotedOnID) AS "You both vote 1"
FROM Voter v
LEFT JOIN Rating a ON a.VoterID = v.VoterID
AND a.Rating = 1
LEFT JOIN Rating b ON a.VotedOnID = b.VoterID
AND b.VotedOnID = a.VoterID
AND b.Rating = 1
GROUP BY v.Name;
关于mysql - 从表中选择COUNT以获取多个数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21336412/