mysql max函数的结果

h7appiyu  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(306)

我很难理解max函数是如何工作的。
这是我的桌板:

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

我要最大总数和 idPlayermatchday 8.但这个问题对我来说是个谜。
我尝试了简单的查询:

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

返回的最大值是正确的(654),但是 idPlayer 错误(1)。
我尝试了许多其他查询,但无法得到正确的结果:(
我对更复杂的查询不是很满意,所以,如果你能帮忙的话。。。

50pmv0ei

50pmv0ei1#

有三个 idPlayer s代表 matchday = 8 ! 您可能会使用允许这种错误查询的mysql,您应该知道mysql返回random 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
    )
muk1a3rh

muk1a3rh2#

试试这个:

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
35g0bw71

35g0bw713#

您的查询:

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);

相关问题