从表中选择COUNT以获取多个数据

从表中选择COUNT以获取多个数据

我将尝试解释我的问题。我在确定如何命名时遇到了问题,希望您能从说明中得到它。

我有一张桌子。有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/

10-10 07:50