Mysql 如何在sql中基于if-else区分列

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

我有一个列为scheduled\u arrival\u date和actual\u arrival\u 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