【问题标题】:mysql query but two differant group bymysql查询,但有两个不同的group by
【发布时间】:2011-11-11 18:15:11
【问题描述】:

如果我的数据是

Name - playerID - matchID - Innings - Runs
James   1   1   1   5
James   1   1   2   8
Darren  2   1   1   3
Darren  2   1   2   9
James   1   2   1   10
James   1   2   2   12
Darren  2   2   1   13
Darren  2   2   2   19

我的sql数据是

$query = "SELECT playerID, name,
        SUM(runs) AS runs_scored,
        MAX(runs) AS highest_score
    FROM matchPlayer GROUP BY playerID";

然后输出将读取

James has scored 35 runs with a highest score of 18
Darren has scored 44 runs with a highest score of 19

现在我希望在一场比赛中获得最高总分(即第一局和第二局的组合)? 我不知道如何开始这个查询:(

编辑 我需要的确切信息是最高匹配总数,因此 James 有 13 个来自 matchID 1 的组合运行和 22 个来自 matchID 2 的组合运行 - 所以我之后的答案是 22。

【问题讨论】:

  • 每场比赛或每场比赛中每位球员最高?
  • 实际上你能给这个示例数据你想要的结果吗?看来我们对您的要求的理解不同...
  • @Martin - 我们确实做到了! :) 3 个不同的答案,解决对问题的不同解释。
  • @Martin 我已经编辑了这个问题。具有讽刺意味的是,我学到了很多新东西:)
  • @James 在这种情况下,Xint0 是对的。

标签: mysql select group-by


【解决方案1】:

你需要分两个阶段来做:

SELECT ms.playerID, mp.name, SUM(ms.runs_by_match) AS runs_scored,
    MAX(ms.runs_by_match) as highest_score
FROM
    matchPlayer as mp
    INNER JOIN (
        SELECT playerID, matchID, SUM(runs) AS runs_by_match
        FROM matchPlayer
        GROUP BY playerID, matchID
    ) AS ms ON mp.playerID = ms.playerID
GROUP BY
    ms.playerID, mp.name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多