我会试着解释我的问题。我有一个问题,想知道如何命名它,所以我希望你能从描述中得到它。
我有一张桌子。有3个重要的列,打扰其他列并不重要。 投票的人,获得投票的人以及评价
我需要获得3个结果(计数)。
1)我需要计算所有给我评级为1的人,但我没有投票给他们,或者我给他们评分为0。
2)我给予评级1的所有人的数量,但他们没有投票给我,或者他们给了我评级0。
3)给我评分的人数和我给他们的评分为1。感谢您的帮助。
答案 0 :(得分:3)
为了简单起见,我假设您不需要在一个查询中执行此操作。如果你这样做,那么你只需要将它们组合成子查询。相反,为了使问题稍微复杂化,我假设你可能想要同时为所有用户提取这些统计数据。
我已经为架构编写了这些查询
Voter ( VoterID, Name )
Rating ( VoterID, VotedOnID, Rating )
上测试了它们
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