【问题标题】:MySQL - get sum() grouped max() of groupMySQL - 获取 group 的 sum() grouped max()
【发布时间】:2011-09-27 01:36:56
【问题描述】:

我有如下表结构。每一行是一个玩过的游戏,每个人每个月可以玩很多次,也可以不玩。

编号 |人 |分数 |日期 | ---------------------------------- 1 | 32 |第444章2011-05 | 2 | 65 | 528 | 2011-05 | 3 | 77 | 455 | 2011-05 | 4 | 32 | 266 | 2011-06 | 5 | 77 | 100 | 2011-06 | 6 | 77 |第457章2011-06 | 7 | 77 |第457章2011-06 | 8 | 65 | 999 | 2011-07 | 9 | 32 | 222 | 2011-07 |

我试图为每个人获取每个月的最佳分数的总和。上面的 S 结果应该是:

人 | SUM(ofbestofeachmonth) --------------------------------- 32 | 932 65 | 1527 77 | 912

我知道如何在一个月或某个范围内获取每个用户的最佳分数

SELECT person, date, MAX(score) FROM tabgames WHERE MONTH(date) = 6 GROUP BY person HAVING (score>0)

因为我最终需要每季度的输出,所以现在我每个月都在获取最好的结果,并且在我添加的 MySQL 之外。

现在我正在阅读有关分组最大值的信息,但仍在尝试获得预期的结果。任何帮助

【问题讨论】:

    标签: mysql group-by groupwise


    【解决方案1】:

    子查询:

    SELECT person, SUM(best)
    FROM
        (SELECT person, MAX(score) as best
        FROM tabgames
        WHERE MONTH(`date`) >= 1 AND MONTH(`date`) <= 6 
        GROUP BY person, MONTH(`date`)) as bests
    GROUP BY person
    

    现在子查询按人员和 MONTH(date) 分组,因此它将返回每个月的一行。

    【讨论】:

    • 我是这样想的,但是这个子查询返回每个人在整个范围内的最高分数,而不是每个月的最高分数。应该有一些加入,尝试但仍然卡住
    • 谢谢,就是这样。注意:不是我的情况,但如果年份是范围,这可能会返回错误的行 - 只需将 YEAR 添加到 where。
    【解决方案2】:
    Select t.person,Max(t.Score) from 
    (
    Select person,Sum(Score) as Score,Month('Date') as [Month]  From tabgames
    WHERE MONTH(`date`) >= 1 AND MONTH(`date`) <= 6 
    GROUP BY PERSON,Month
    
    ) AS t
    

    【讨论】:

    • 为了可读性:WHERE MONTH(date) &gt;= 1 AND MONTH(date) &lt;= 6 可以重写:WHERE MONTH(date) BETWEEN 1 AND 6
    猜你喜欢
    • 1970-01-01
    • 2019-10-09
    • 2021-03-04
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多