我很难理解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)。
我尝试了很多其他查询,但我无法得到正确的结果:(
我对更复杂的查询感到不舒服,所以,如果你能提供帮助......
答案 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