Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为多个数据从表中选择计数_Mysql - Fatal编程技术网

Mysql 为多个数据从表中选择计数

Mysql 为多个数据从表中选择计数,mysql,Mysql,我要试着解释我的问题。我有一个问题,以找出如何命名,所以我希望你会得到它的描述 我有一张桌子。有3个重要的栏目,其他栏目不重要。 投票人、得票人和评级 我需要得到3个结果(计数) 1) 我需要统计所有给我评分为1的人,但我没有给他们投票,或者我给他们评分为0 2) 当我给1分但他们没有给我投票或给我0分时,所有人的计数 3) 给我评分的人数,我也给他们评分1 谢谢您的帮助。为了简单起见,我假设您不需要在一个查询中执行此操作。如果您这样做了,那么您将不得不将它们组合为子查询。相反,让事情稍微复杂一

我要试着解释我的问题。我有一个问题,以找出如何命名,所以我希望你会得到它的描述

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