Mysql 为多个数据从表中选择计数
我要试着解释我的问题。我有一个问题,以找出如何命名,所以我希望你会得到它的描述 我有一张桌子。有3个重要的栏目,其他栏目不重要。 投票人、得票人和评级 我需要得到3个结果(计数) 1) 我需要统计所有给我评分为1的人,但我没有给他们投票,或者我给他们评分为0 2) 当我给1分但他们没有给我投票或给我0分时,所有人的计数 3) 给我评分的人数,我也给他们评分1Mysql 为多个数据从表中选择计数,mysql,Mysql,我要试着解释我的问题。我有一个问题,以找出如何命名,所以我希望你会得到它的描述 我有一张桌子。有3个重要的栏目,其他栏目不重要。 投票人、得票人和评级 我需要得到3个结果(计数) 1) 我需要统计所有给我评分为1的人,但我没有给他们投票,或者我给他们评分为0 2) 当我给1分但他们没有给我投票或给我0分时,所有人的计数 3) 给我评分的人数,我也给他们评分1 谢谢您的帮助。为了简单起见,我假设您不需要在一个查询中执行此操作。如果您这样做了,那么您将不得不将它们组合为子查询。相反,让事情稍微复杂一
谢谢您的帮助。为了简单起见,我假设您不需要在一个查询中执行此操作。如果您这样做了,那么您将不得不将它们组合为子查询。相反,让事情稍微复杂一点,我假设您可能希望同时为所有用户获取这些统计数据
SELECT Count(Table1.Field), Count(Table2.Field), Count(Table3.Field)
FROM Table1,Table2, Table3
我已经为模式编写了这些查询
Voter ( VoterID, Name )
Rating ( VoterID, VotedOnID, Rating )
我测试了它们
1) 我需要统计所有给我评分为1的人,但我没有给他们投票,或者我给他们评分为0
2) 当我给1分但他们没有给我投票或给我0分时,所有人的计数 N.B.除了最后的
ON
条件外,这与上面的查询完全相同
3) 给我评分[1]的人数,我也给他们评分1
这远远不是答案。解释原因?即使编辑了它也有同样的效果,根本没有帮助编辑只是格式化,你可以放心地忽略这个答案。这有点像有人问如何制造一辆汽车,你给他们4个轮子,然后说“现在只需添加汽车”。这甚至还不接近正确答案。OP明确表示他只有一张桌子,而不是3张。好的一面是,如果你删除这张桌子,你会得到一个漂亮闪亮的“同侪压力”徽章。tttpapi,3)是不是你们都给对方1分?我发现了一个小问题。我需要把1和2与3分开。我不能在(1或2)和(3)中有相同的记录。我测试了第一个,它也给了我3的结果(当两个都给对方1时)。对此很抱歉,用固定查询和新的SQLFiddle更新了答案
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;
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;
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;