gpt4 book ai didi

mysql - 返回 MySQL 中 MAX 函数的相应列

转载 作者:可可西里 更新时间:2023-11-01 07:21:09 25 4
gpt4 key购买 nike

我有一张表格,其中包含保龄球中心球员的投球得分。每一行都有一些数据,比如哪个球员投了球,参加了哪个联赛,日期,单场比赛的比分,球道号等。

我想做的是让谁(以及在哪个联赛和什么日期......基本上是整排)在每个单车道上打出最好的系列赛(三场比赛)。

我目前的情况是

SELECT PlayerID, LaneNumber, MAX(Series)
FROM (SELECT Season, LeagueName, LaneNumber, WeekNumber, PlayerID, Date, SUM(Score) AS Series
FROM Scores
GROUP BY Season, LeagueName, WeekNumber, PlayerID)
GROUP BY LaneNumber

这行得通,因为我在每条车道上都获得了最好的三场比赛,这实际上是我想要的,但包含 PlayerID 的另一个字段实际上并不正确。

在我的表格中,第 24 道的最佳分数(从 SUM(Score) 和 GROUP BY Season、LeagueName、WeekNumber、PlayerID 获得)是 848,由 PlayerID 为 36 的玩家打出。

我得到的是带 848 的第 24 道(这是正确的),但返回的 PlayedID 是 3166。同样的事情发生在每条道上。 (例如,我得到的 PlayerID 显然是错误的。如果我在第一个选择中有其他列,它们也是错误的)

最佳答案

您违反了 GROUP BY 的语义。

当使用 GROUP BY 时,它只对 SELECT 您分组的列(例如 LaneNumber)和其他聚合函数有意义列(例如 MAX(Series))。选择其他任何内容(在您的情况下,PlayerID)没有意义,因为您没有指定您想要哪个共享相同 LaneNumber 的玩家 ID

遗憾的是,默认情况下,MySql 将允许您执行此操作而不会报告错误,并且它将返回它为违规列选择的任何值。在您的情况下,这意味着您正在取回一个“随机”选择的播放器 ID,这些播放器 ID 是从指定分组中包含的那些播放器 ID 中选择的。

您也在内部查询中执行此操作,您可以在其中选择 LaneNumberWeekNumberDate

解决方案

查询需要重写,但首先您需要仔细指定您想要获得的结果。您想要每个系列赛(和任何车道)的最佳球员和相关数据吗?对于每个系列和车道分别?这个问题的答案将决定您需要什么来GROUP BY,以及查询的扩展形式。

关于mysql - 返回 MySQL 中 MAX 函数的相应列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com