如何解决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_size
是1
n 2
,3
或4
)。
如果是这样,我只是看不到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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。