MySQL MAX功能的结果

时间:2018-01-12 10:36:59

标签: mysql sql max

我很难理解MAX功能的工作原理。

这是我的表 MD_board

idPlayer | matchday | total
---------+----------+-------
    1    |    7     |   354
---------+----------+-------
    2    |    7     |   122
---------+----------+-------
    3    |    7     |   672
---------+----------+-------
    1    |    8     |   452
---------+----------+-------
    2    |    8     |   90
---------+----------+-------
    3    |    8     |   654
---------+----------+-------

我希望获得idPlayer的最大总数和matchday 8。但查询对我来说是一个谜。

我尝试了简单的查询:

SELECT MAX(total), idPlayer FROM MD_board WHERE matchday=8

返回的最大值很好(654),但idPlayer错误(1)。

我尝试了很多其他查询,但我无法得到正确的结果:(

我对更复杂的查询感到不舒服,所以,如果你能提供帮助......

3 个答案:

答案 0 :(得分:2)

idPlayer有三matchday = 8个!您可能使用允许此类错误查询的MySQL,您应该知道MySQL返回随机 idPlayer值。因此,对于相同的查询,您明天可以获得不同的idPlayer

您可能希望在特定total中具有最高matchday的玩家:

 SELECT * 
 FROM MD_board MD1
 WHERE matchday=8 and total = 
    (
         SELECT MAX(total) 
         FROM MD_board MD2 
         WHERE MD2.matchday = MD1.matchday
    )

答案 1 :(得分:1)

您的查询:

SELECT MAX(total), idPlayer FROM MD_board WHERE matchday=8

在没有MAX的情况下应用GROUP BY,您可以将数据汇总到一个结果行。您可以选择当天的最大总数654,以及当天的 idPlayer。但是没有一个播放器,它有三个不同的播放器。根据SQL标准,这是无效的SQL,但MySQL让这个滑动,并随意返回三个玩家中的一个。

如果您想要具有最大总数的记录中的更多数据,请再次选择这些记录:

SELECT * 
FROM MD_board 
WHERE matchday = 8 
AND total = (SELECT MAX(total) FROM MD_board WHERE matchday = 8);

答案 2 :(得分:0)

试试这个:

SELECT M.* 
FROM MD_board M
JOIN (
    SELECT matchday,MAX(Total)Total 
    FROM MD_board 
    GROUP BY matchday
    )D on D.matchday=M.matchday AND D.Total=M.Total