我正在尝试比较两支在同一支球队打过球的足球运动员,我试图知道谁在他们一起比赛的每场比赛中得分更多,并计算一名球员在比赛中得分更多的次数。每场比赛。例如:
最终结果应该是Messi = 2,因为他在2场比赛中打入更多进球。
我有下一个查询来查找与我选择的玩家共享相同团队和游戏的玩家(本例中为Messi):
SELECT S1.Team, S1.Game, S1.Player, S2.Team, S2.Game, S2.Player
FROM Mytable S1
INNER JOIN Mytable S2 ON S1.Team = S2.Team AND
S1.Game= S2.Game AND
S1.Player LIKE '".mysql_real_escape_string($Messiinthiscase)."'
AND S2.Player <> '".mysql_real_escape_string($Messiinthiscase)."';
Mytable就像:
Player | Team | Game | Goals
-------------------------------
Messi A G1 2
Neymar A G1 0
Messi A G2 2
Neymar A G2 3
Messi A G3 4
Neymar A G3 1
但我不知道如何实施COUNT来比较两个玩家。可能这是一个愚蠢的问题,答案很简单,但我已经花了几个小时研究它并没有想到任何事情。
感谢您的帮助
答案 0 :(得分:0)
SELECT S1.Team, S1.Game, S1.Player, S2.Team, S2.Game, S2.Player, CASE WHEN S1.goals < S2.goals THEN S2.goals - S1.goals WHEN S2.goals < S1.goals THEN S1.goals - S2.goals ELSE 0 END as difference
FROM Mytable S1
INNER JOIN Mytable S2 ON S1.Team = S2.Team AND
S1.Game= S2.Game AND
S1.Player LIKE '".mysql_real_escape_string($Messiinthiscase)."'
AND S2.Player <> '".mysql_real_escape_string($Messiinthiscase)."';
答案 1 :(得分:0)
虽然本身就是一个奇怪的查询,但请看看这是否有帮助。你正处于良好的轨道上,正如你所说,这是另一个TEAM-MATE在同一场比赛中进行的比赛...所以你需要一个基于案例的SUM()/由你的“梅西”球员和其他人分组打得分...然后应用一个HAVING。所以,如果梅西有5个队友,那么应该有4个可能的回报
梅西vs队友1 梅西vs队友2 梅西vs队友3 梅西vs队友4
其中,梅西的得分可能超过队友1,2和4,但不到3分。
SELECT
S1.Team,
S1.Player,
S2.Player,
sum( case when s1.goals > s2.goals then 1 else 0 end ) as Player1Higher,
sum( case when s1.goals < s2.goals then 1 else 0 end ) as Player1Lower
FROM
Mytable S1
INNER JOIN Mytable S2
ON S1.Team = S2.Team
AND S1.Game = S2.Game
AND NOT S1.Player = S2.Player
WHERE
S1.Player LIKE '".mysql_real_escape_string($Messiinthiscase)."'
GROUP BY
S1.Team,
S1.Player,
S2.Player
HAVING
sum( case when s1.goals > s2.goals then 1 else 0 end ) >
sum( case when s1.goals < s2.goals then 1 else 0 end )
请注意,WHERE子句具有“Messi”字符串的条件,而JOIN子句只是说播放器1(Messi)对于播放器2来说是不一样的。
分组不包括每个游戏,因为您想根据玩家所玩的游戏总数...
最后,包括最终“仅保留这些记录”,其中玩家1目标的总和超过玩家2目标的总和。
如果你删除了HAVING条款,你会看到你的结果是梅西比玩家内马尔有2个游戏更高的目标和1个游戏的LESS目标
比较不考虑“=”,因为两个玩家都没有比其他玩家更多的积分...所以如果这样的游戏中两个人得分都是2分,那么两个人都不会被认为是得分较高的玩家。
通过
可以进一步简化比较 sum( case when s1.goals = s2.goals then 0
when s1.goals > s2.goals then 1 else -1 end ) as NetGames
所以,再说一次,如果分数相关,那么没有人会更好。如果s1目标更高,则+1,否则其他玩家更高,-1。如果网络游戏是积极的,那么玩家1是更好的玩家,= 0平局,负面是其他玩家更好。