gpt4 book ai didi

mysql - groupwise max 导致 sql_mode 错误

转载 作者:行者123 更新时间:2023-11-29 06:56:16 40 4
gpt4 key购买 nike

挑战是从表格中选择每日最高温度以及每个温度的日期和时间信息。

SELECT datestamp, max(temp) hitemp from Weather w group by `year`, `month`, `day`;

这会导致

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'Weather.datestamp' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

其他类似的问题建议使用 JOIN,但我不知道如何使用 JOIN 语法,因为高温值不是唯一的。

最佳答案

RDBMS 在基于集合的逻辑上工作得最好。因此,请考虑两组数据:

  • w2:包含给定日期最高温度的一组数据
  • w:包含一段时间内所有测量值的数据域

通过连接这两个集合,我们可以从 w 中获取特定日期最高温度的数据。

通过对整个宇宙集 {w} 使用内联 View {w2},我们可以生成每天的最高温度,然后连接回基本集 {w} 以获取每天最高温度的时间信息。

这假设:

  • 如果同一日期的多个记录都有最高温度,您需要全部记录,因为您没有指明如何处理关系。
  • datestamp 有一个时间部分;这是您想要查看一天最高温度的日期/时间。

这就是其他人所说的加入最有可能的意思:

  • date(datestamp) 仅返回日期/时间的日期部分。
  • max() 返回指定组的最高温度(在本例中为日期戳的日期)

.

SELECT datestamp, Temp
FROM weather W
INNER JOIN (SELECT date(datestamp) mDate, max(temp) as mtemp
FROM weather
GROUP BY Date(DateStamp)) W2
on W.temp = W2.mtemp
and Date(w.Datestamp) = w2.mDate

其他信息:MySQL 不支持 cross apply 也不支持分析函数 row_number() Over (partition by date(datestamp) order by temp desc) 也可用于解决此问题可能会有更好的表现。 SQL Server、Oracle、DB2、Postgresql 都有不同的方法来解决这个问题;然而上面的例子适用于所有 RDBMS 引擎(我能想到的);但并不是在所有情况下都是最有效的。

关于mysql - groupwise max 导致 sql_mode 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45486552/

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