SELECT COUNT FROM table FOR多个数据

时间:2014-01-24 15:30:48

标签: mysql

我会试着解释我的问题。我有一个问题,想知道如何命名它,所以我希望你能从描述中得到它。

我有一张桌子。有3个重要的列,打扰其他列并不重要。 投票的人,获得投票的人以及评价

我需要获得3个结果(计数)。

1)我需要计算所有给我评级为1的人,但我没有投票给他们,或者我给他们评分为0。

2)我给予评级1的所有人的数量,但他们没有投票给我,或者他们给了我评级0。

3)给我评分的人数和我给他们的评分为1。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

为了简单起见,我假设您不需要在一个查询中执行此操作。如果你这样做,那么你只需要将它们组合成子查询。相反,为了使问题稍微复杂化,我假设你可能想要同时为所有用户提取这些统计数据。

我已经为架构编写了这些查询

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;

答案 1 :(得分:-4)

SELECT Count(Table1.Field), Count(Table2.Field), Count(Table3.Field) 
FROM Table1,Table2, Table3
相关问题