繁体   English   中英

SQL 查询 GROUP BY?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM