[英]SQL Query GROUP BY?
我和一些朋友正在编写一个 php 网站,我们可以在其中记录我们的比赛、创建比赛并为这些比赛记录比赛等。
我们在展示某项锦标赛的比赛时碰壁了。 我们尝试使用 php 进行操作,但这完全弄乱了锦标赛表
我们有一个名为 matches 的表,其中包含以下列:
ID player1ID player2Id team1ID team2ID ScorePlayer1 ScorePlayer2 Date TournamentID
现在我们要制作如下表格:
GPl W L D + - +/- Pnts
Nielsen 6 1 3 2 3 6 -3 13
Chibax 6 2 1 3 4 3 1 9
Verre 6 1 3 2 3 6 -3 5
Hermie 6 4 1 1 7 2 5 5
但是对于 php ,带有 WLD 和点的行永远不会匹配,整个表很奇怪。
任何人都知道我们如何使用 SQL 命令来做到这一点? (对于非足球人士:赢 x 3 pnts 平局 x 1 pnts 输 0 pnts
我不知道 mysql 和 php 是否仍然避开子查询,但以下可能有工作的机会。 稍后我会测试它,因为我现在没有时间。 我只是想给你一些想法。
如果子查询不起作用,那么您可以创建子查询的视图并从那里继续。
我也不确定 mysql 是否支持使用双引号 ( "+/-"
) 表示的列名
基本思路是将 select 得分分别用于主场和客场。 聚合函数通常允许在其中允许使用 case 语句,这可以让您发挥一些作用。
SELECT
player,
SUM(M) M,
SUM(W) W,
SUM(E) E,
SUM(D) D,
SUM("+") "+",
SUM("-") "-",
SUM("+/-") "+/-",
SUM(Pnts) Pnts
FROM (
SELECT
player1ID player,
count(*) M,
SUM(case when ScorePlayer1 > ScorePlayer2 then 1 end) W,
SUM(case when ScorePLayer1 < ScorePlayer2 then 1 end) E,
SUM(case when ScorePlayer1 = ScorePlayer2 then 1 end) D
SUM(ScorePlayer1) "+",
SUM(ScorePlayer2) "-",
SUM(ScorePlayer1) - SUM(ScorePlayer2) "+/-",
SUM(case when ScorePlayer1 > ScorePlayer2 then 1 end) * 3 +
SUM(case when ScorePLayer1 < ScorePlayer2 then 1 end) Pnts
FROM
someTable
GROUP BY
player1ID
UNION ALL
SELECT
player2ID player,
count(*) M,
SUM(case when ScorePlayer2 > ScorePlayer1 then 1 end) W,
SUM(case when ScorePLayer2 < ScorePlayer1 then 1 end) E,
SUM(case when ScorePlayer2 = ScorePlayer1 then 1 end) D
SUM(ScorePlayer2) "+",
SUM(ScorePlayer1) "-",
SUM(ScorePlayer2) - SUM(ScorePlayer1) "+/-",
SUM(case when ScorePlayer2 > ScorePlayer1 then 1 end) * 3 +
SUM(case when ScorePLayer2 < ScorePlayer1 then 1 end) Pnts
FROM
someTable
GROUP BY
player2Id
) scoresheet
ORDER BY
Pnts desc,
M asc,
"+/-" desc,
"+" desc,
"-" asc
编辑:我忘了订购结果。 如果您想使用玩家 A 和 B 之间的比赛来对结果进行排序,以防出现平局,您需要一点魔法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.