Mysql 如何在sql中基于if-else区分列
我有一个列为scheduled\u arrival\u date和actual\u arrival\u date的订单表,我需要找出哪个订单提前交付和延迟交付,我需要根据这两列来区分订单,因为我没有创建新表的权限,所以我需要从查询中获取这一信息。 我试过这个,但我进入了单列Mysql 如何在sql中基于if-else区分列,mysql,Mysql,我有一个列为scheduled\u arrival\u date和actual\u arrival\u date的订单表,我需要找出哪个订单提前交付和延迟交付,我需要根据这两列来区分订单,因为我没有创建新表的权限,所以我需要从查询中获取这一信息。 我试过这个,但我进入了单列 SELECT order.id,order.item, CASE WHEN scheduled_arrival_date >= actual_arrival_date
SELECT order.id,order.item,
CASE WHEN scheduled_arrival_date >= actual_arrival_date
THEN 'late'
WHEN scheduled_arrival_date <= actual_arrival_date
THEN 'Early'
END as delivered
FROM order
这个查询肯定没有经过优化,但它可以工作。第一个查询收集所有延迟发货,并将“late”放入late列。第二个做了完全相同的把戏,但与早期,我们联合所有的结果在一起
然而,我真的不明白你为什么想要两列,这样看起来很奇怪,你最初的要求比IMO好得多
PS:请注意,您不应在两种情况下都使用=,当您想要创建饼图时,相等情况下存在冲突。在我看来,您只对这两种情况的数字计数感兴趣。您可以这样做:
SELECT COUNT(CASE WHEN actual_arrival_date-scheduled_arrival_date>0 THEN 1 END) late,
COUNT(CASE WHEN actual_arrival_date-scheduled_arrival_date<=0 THEN 1 END) early
FROM order
你想要什么结果?请阅读,这里是一个学习如何提高问题质量和获得更好答案的好地方。我需要在此基础上创建饼图再次说明您希望通过饼图的结果是什么?延迟交货和提前交货的订单我们知道您需要延迟/提前交货。但请编辑您的问题,并向我们展示您希望如何获得数据。
SELECT COUNT(CASE WHEN actual_arrival_date-scheduled_arrival_date>0 THEN 1 END) late,
COUNT(CASE WHEN actual_arrival_date-scheduled_arrival_date<=0 THEN 1 END) early
FROM order