过滤和聚合不在group by子句MySQL中的列

球体:

我有下表。我正在使用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列应基于该条件被平均:取averagep_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

列“在选择列表中无效,因为它既不在聚合函数中也不在GROUP BY子句中”

MySQL,SELECT列表不在GROUP BY子句中,并且包含未聚合的列

显示不在GROUP BY子句中的列而不在其上应用聚合函数

Mysql2::Error: SELECT 列表的表达式 #5 不在 GROUP BY 子句中并且包含非聚合列

WHERE 子句中的 MySql GROUP BY 和聚合函数

mysql中的group by子句问题

表达式不在聚合或GROUP BY列中

postgresSQL 中 GROUP BY 子句中所需列的聚合

GROUP BY子句,并且在查询中包含未聚合的列

通过不在GROUP中的过滤器过滤SQL GROUP

选择列表中的t1.id无效,因为它既不在聚合函数中也不在group by子句中

MySQL:group子句有多个列

过滤器的MySql表单查询或NodeJS中的列值忽略WHERE子句

SELECT列表不在GROUP BY子句中,并且包含未聚合的列....与sql_mode = only_full_group_by不兼容

没有GROUP BY子句的MySQL聚合函数

为什么选择中没有聚合功能的列需要成为MySQL中Group by子句的一部分?

尊重 MySQL 子查询中的 GROUP BY 子句

如何在oracle select sql中的GROUP BY子句中获取不在列中的其他列?

选择不在GROUP BY子句中的列

SELECT列表的表达式#3不在GROUP BY子句中,并且在尝试创建View时包含非聚合列

错误 SqlExceptionHelper:146 - SELECT 列表的表达式 #7 不在 GROUP BY 子句中并且包含非聚合列

聚合函数的过滤子句

选择列中的“列原因”无效,因为它不包含在聚合函数或GROUP BY子句中

选择列表中的列无效,因为该列未包含在聚合函数或GROUP BY子句中

如何在Oracle 10g中的GROUP BY子句中获取不在中的其他列?

MYSQL GROUP BY和WHERE子句

python pandas group by和聚合列

非聚合列、SUM、MAX 和 GROUP BY

MySQL:不在GROUP BY中