我有下表。我正在使用mysql-5.7。这是dbfiddle
select * from report;
+----+---------------------+---------+------+------+------------+------+-------------------+
| id | date_hour | speed | name | nor | validation | p_i | speed_performance |
+----+---------------------+---------+------+------+------------+------+-------------------+
| 1 | 2018-02-03 13:23:00 | -12.3 | SYN | 10 | 1 | 3 | 4 |
| 2 | 2018-02-03 11:23:00 | -6.36 | SYN | 13 | 0 | 4 | 5 |
| 3 | 2018-02-03 01:23:00 | -26.36 | SYN | 24 | 0 | 2 | 4 |
| 4 | 2020-04-06 21:23:00 | -156.36 | SYN | 16 | 1 | 3 | 6 |
| 5 | 2020-04-06 03:23:00 | -36.36 | YRT | 136 | 0 | 2 | 5 |
| 6 | 2020-04-06 12:23:00 | -16.36 | SYN | 13 | 1 | 4 | 4 |
+----+---------------------+---------+------+------+------------+------+-------------------+
我希望group by
date_hour
在之后12:00:00
,可以算作第二天。的p_i
列应基于该条件被平均:取average
的p_i
,其中validation
为1且p_i
是非零的。这些值应基于的新版本进行平均date_hour
。此外,nor
在没有这种条件的情况下,对另一列()取平均值。
输出应如下所示
+------+------------+----------+------+
| name | date_hr | avg(nor) | p_i |
+------+------------+----------+------+
| SYN | 2018-02-03 | 18.5 | NULL |
| SYN | 2018-02-04 | 10 | 3 |
| SYN | 2020-04-07 | 14.5 | 3.5 |
| YRT | 2020-04-06 | 136 | NULL |
+------+------------+----------+------+
我尝试了以下查询。我必须禁用only_full_group_by
它才能正常工作。
select name,
case when time(date_hour) > '12:00:00'
then date(date_hour) + interval 1 day
else date(date_hour) end as date_hr,
avg(nor),
case when validation = 1 and p_i > 0 then avg(p_i) else null end as p_i
from report group by name, date_hr;
+------+------------+----------+------+
| name | date_hr | avg(nor) | p_i |
+------+------------+----------+------+
| SYN | 2018-02-03 | 18.5 | 3 |
| SYN | 2018-02-04 | 10 | NULL |
| SYN | 2020-04-07 | 14.5 | NULL |
| YRT | 2020-04-06 | 136 | 2 |
+------+------------+----------+------+
您可以使用条件聚合来做到这一点:
select max(name) name,
date(date_add(date_hour, interval 12 hour)) date,
avg(nor) avg_nor,
avg(case when validation = '1' and p_i <> 0 then p_i end) avg_p_i
from report
group by date
我使用了聚合函数max()
来返回列name
,但是您也可以使用min()
或any_value()
。
参见演示。
结果:
> name | date | avg_nor | avg_p_i
> :--- | :--------- | ------: | ------:
> SYN | 2018-02-03 | 18.5 | null
> SYN | 2018-02-04 | 10 | 3
> YRT | 2020-04-06 | 136 | null
> SYN | 2020-04-07 | 14.5 | 3.5
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句