【发布时间】:2012-04-26 07:17:52
【问题描述】:
这是一个有点复杂的查询,但我有一个斯诺克比赛数据库,我正在尝试生成谁打过比赛并赢得了最多决定性的比赛的统计数据(如果你不担心规则,请不要担心了解游戏)。
表:
ID player1 player2 bestOf player1Score player2Score
1 1 2 9 5 0
2 2 1 9 5 4
3 1 2 9 5 4
4 2 1 9 4 5
我正在尝试做的事情如下:
SELECT COUNT(*) AS played, DISTINCT(player1,player2) AS playerID
FROM matches
WHERE (player1Score=BestOf / 2 + 0.5 AND player2Score=BestOf / 2 - 0.5)
GROUP BY playerID
上面的查询不起作用,因为我相信 DISTINCT 不支持多列。我从上表中寻找的结果是:
playerID played won
1 3 2
2 3 1
表格中的第一行不显示,因为它不是最后一帧。
我尝试过以下变体:
SELECT GROUP(player1,player2)
SELECT player1 + player2 AS playerID, select DISTINCT(playerID)
SELECT (player1 + player2) AS playerID GROUP BY playerID
还有一些其他的。任何提示将不胜感激!
【问题讨论】:
-
您可能正在寻找
CONCAT():dev.mysql.com/doc/refman/5.5/en/… -
嗯.. 讨厌的设计。尝试学习数据库规范化。别担心,不是regular expressions,你可以很容易地学习它:-)
-
player1 和 player 怎么可能只玩三场比赛。根据样本数据,看起来他们已经打了四场比赛。玩家 1 赢了 3 局,玩家 2 赢了 1 局。
-
@Romil 我认为“决定帧”的含义是最后一场比赛完全决定谁会赢得比赛的比赛。第一局不是这样,但接下来的3局,最后一局决定了比赛的胜负。
-
adi92 是正确的,不幸的是 CONCAT() 似乎不起作用。