UNION多个查询一起只能改变条件,更好的方法?

问题描述

我正在寻找一种更好的方法来改善以下内容我有根据聚会规模进行的聚会持续时间平均查询。每个告诉我一定规模的聚会停留多长时间。有没有一种更干净的更好的方法查询查询,而不是将每个查询一起查询?有什么方法可以进行查询以使用变量吐出来吗?还是这已经是最好的方法了?

SELECT party_size,TIME_FORMAT( SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(`booking_time_out`,`booking_time`) ) ) ),'%H:%i')  as Average FROM table_name where booking_time_out!= '0:00:00' AND party_size = 1

UNION

SELECT party_size,'%H:%i')  as Average FROM table_name where booking_time_out!= '0:00:00' AND party_size = 2

UNION

SELECT party_size,'%H:%i')  as Average FROM table_name where booking_time_out!= '0:00:00' AND party_size = 3

UNION

SELECT party_size,'%H:%i')  as Average FROM table_name where booking_time_out!= '0:00:00' AND party_size = 4

解决方法

union成员查询看起来实际上是相同的,唯一的区别是where子句中的最后一个条件-它们是互斥的(party_size1 n 234)。

如果是这样,我只是看不到union的意义。您可以使用聚合查询,在party_size子句中的where上使用布尔逻辑-in对此非常有用。

SELECT party_size,TIME_FORMAT( SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF(`booking_time_out`,`booking_time`) ) ) ),'%H:%i')  as Average 
FROM table_name 
where booking_time_out!= '0:00:00' AND party_size IN (1,2,3,4)
GROUP BY party_size

如果表中缺少某些值,而您仍然希望它们出现在结果集中(就像原始的union查询一样),则可以先枚举值,然后将数据集带有{{ 1}}:

left join