Mysql 计算两列并显示满足条件的总数

Mysql 计算两列并显示满足条件的总数,mysql,Mysql,我在这里和其他地方看到了这个问题的提出和回答,但仍然无法得到我想要的结果。所以,请原谅重复 我想返回一个表,显示一个玩家(两列玩家)赢得一场游戏的次数(名为place的列中有1) 我的问题是: SELECT `player1` as Winner, Count( * ) AS Count FROM scores WHERE `place` =1 UNION ALL SELECT `player2` as Winner, Count( * ) AS Count FROM scores WHERE

我在这里和其他地方看到了这个问题的提出和回答,但仍然无法得到我想要的结果。所以,请原谅重复

我想返回一个表,显示一个玩家(两列玩家)赢得一场游戏的次数(名为place的列中有1)

我的问题是:

SELECT `player1` as Winner, Count( * ) AS Count
FROM scores
WHERE `place` =1
UNION ALL
SELECT `player2` as Winner, Count( * ) AS Count
FROM scores
WHERE `place` =1
ORDER  BY count DESC  
表格结构为:

player1 varchar
player2 varchar
place   smallint
Other unrelated columns
我希望得到这样的答复:

Winner     Count
Joe          5
Sam          4
Bill         3
列标签对我来说并不重要,因为我将获取结果并将其放在网页上

phpadmin在我的查询中报告了一个错误,而Instant SQLformatter()似乎表示查询正常(格式化查询而不是显示错误)


那么,我做错了什么呢?

我会将查询稍微更改为以下内容。此查询将
player1
player2
列转换为具有多行的单个列,然后您可以应用计数:

select Winner,
  count(*) Total
from
(
  SELECT `player1` as Winner
  FROM scores
  WHERE `place` =1
  UNION ALL
  SELECT `player2` as Winner
  FROM scores
  WHERE `place` =1
) src
group by winner
order by total desc;

请参见

您可以执行一个简单的
联合所有
,并使用玩家姓名上的
分组依据
计算结果

SELECT Name AS Winner, COUNT(Name) AS Count
FROM (
  SELECT player1 AS Name FROM Scores WHERE place=1
  UNION ALL
  SELECT player2 AS Name FROM Scores WHERE place=1
) a
GROUP BY Name
ORDER BY Count DESC;

那么,如果
得分
中的记录是
('Joe','Sam',1)
,谁赢了?你的专栏是什么意思?是不是如果有一个明确的赢家,player2是空的,如果有平局,player2不是空的?或者两者都可以为空?我从未见过这样的柏油——我一点也不懂。请告诉我(我们)这张桌子上有关于重复桥牌游戏的信息(精彩的游戏几乎和编程一样有趣!)。游戏由双人进行,桌上有一列双人游戏,然后为双人游戏中的每个玩家分别设置一列。该查询将显示在所有报告的比赛中,哪位球员赢得最多的胜利。玩家有时会和不同的伙伴玩。在我的例子中,也许乔和比尔一起玩了3次,而山姆和其他4个人一起玩了,他们将在成绩表上排名靠后。谢谢。工作完美(一旦我将DESC包含在订单中)。@比尔:是的,我错过了。:)我没有足够的声望点数来投票支持一个答案,但如果我这么做了,我肯定会的!我没有足够的声望点数来投票支持一个答案,但如果我这么做了,我肯定会的@比尔:您可以通过选中任一答案的透明复选框,将您的问题标记为已回答。如果两个答案都同样有用,蓝脚猫会快几秒钟,所以我会给他打上标记:)