0

我有一个 MYSQL 表,它存储来自我的气象站的天气数据。它将记录每分钟的数据,如雨量、风速。表格格式为日期、时间、雨量、风速……,雨量为浮点数。我想知道每天下雨的总摘要。但是,当我使用以下说明时,结果与我的预期不同。将 3 月 4 日和 2 月 4 日的总降雨量相加。我知道我不应该每天使用 group,但我不知道另一个指令来防止它。

SELECT date, sum(rain) AS sumRain 
FROM `XXX` 
where date>='2020-01-01' and rain>0 
group by day(date) 
order by date ASC 

date sumRain 2020-02-04 5 <--2020-02-04 的总降雨量应为 3.75 2020-03-05 2.25

SELECT date, sum(rain) AS sumRain 
FROM `XXX` 
where date>='2020-02-05' and rain>0 
group by day(date) 
order by date ASC 

日期 sumRain 2020-03-04 1.25

4

2 回答 2

0

您必须按月和日对数据进行分组。

像这样试试

SELECT date, sum(rain) AS sumRain 
FROM `XXX` 
where date>='2020-02-05' and rain>0 
group by day(date),month(date),year(date) 
order by date ASC 
于 2020-03-06T04:43:15.270 回答
0

根据您的描述,我假设date您的数据库列实际上是datetime.

因为DAY是返回月份日期的函数,所以按这种方式分组意味着 2020-02-05 和 2020-03-05 是同一天,即 5。

或者,日期作为函数会删除存储的时间方面。因为dateandday是函数,所以在引用列而不是函数时需要引用。

MySQL 允许您使用 SELECT 结果和 GROUP BY/ORDER BY,如下例所示。这使得相同的代码可以在默认情况下对sql_mode=only_full_group_by严格的 5.7 和 8.0 中工作。

SELECT date(`date`) as `day`, sum(rain) AS sumRain 
FROM `XXX` 
where date>='2020-02-05' and rain>0 
group by `day`
order by `day` ASC 
于 2020-03-06T04:56:34.120 回答