Mysql 筛选并聚合不在GROUPBY子句中的列

Mysql 筛选并聚合不在GROUPBY子句中的列,mysql,group-by,Mysql,Group By,我有下表。我正在使用mysql-5.7。这是你的电话号码 我想按date\u hour分组,这样在12:00:00之后,它就算作第二天了。p_i列应根据以下条件求平均值:取p_i的average,其中validation为1,p_i为非零。应根据新版本的date\u hour计算这些值的平均值。此外,另一列(或)在没有此类条件的情况下求平均值 输出应该如下所示 +------+------------+----------+------+ | name | date_hr | avg(no

我有下表。我正在使用mysql-5.7。这是你的电话号码

我想按
date\u hour
分组,这样在
12:00:00
之后,它就算作第二天了。
p_i
列应根据以下条件求平均值:取
p_i
average
,其中
validation
为1,
p_i
为非零。应根据新版本的
date\u hour
计算这些值的平均值。此外,另一列(
)在没有此类条件的情况下求平均值

输出应该如下所示

+------+------------+----------+------+
| 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\u full\u group\u 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

我看不出我能如何改进它。你是说那两个多余的栏目吗?我已经重新定位了fiddle链接以提高可视性。为什么不在之前为您的分组添加12个小时?我想我正在使用
按日期分组\u hr
做同样的事情?也许吧,但这些案例会变得多余
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
> 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