Mysql 如何在SQL中生成百分比列?

Mysql 如何在SQL中生成百分比列?,mysql,sql,datetime,count,inner-join,Mysql,Sql,Datetime,Count,Inner Join,超级新的SQL在这里 我试图在第三列列出重新交付的订单与总订单的百分比,但我不知道该怎么做(即,对于输出中的第一行,该值应为4%) 这是我的密码: SELECT DISTINCT WH AS Warehouse, count(order_id) AS Orders, sum(CASE WHEN is_redelivered=1 THEN 1

超级新的SQL在这里

我试图在第三列列出重新交付的订单与总订单的百分比,但我不知道该怎么做(即,对于输出中的第一行,该值应为4%)

这是我的密码:

SELECT DISTINCT WH AS Warehouse,
                count(order_id) AS Orders,
                sum(CASE
                        WHEN is_redelivered=1 THEN 1
                        ELSE 0
                    END) AS Redelivered
FROM
  (SELECT DISTINCT o.id AS order_id,
                   wh.code AS WH,
                   o.initial_delivery_date,
                   date(o.delivered_by) AS delivered_by,
                   if(o.delivered_by>o.initial_delivery_date, 1, 0) AS is_redelivered
   FROM `order` o
   JOIN `order_status` os ON o.id = os.id
   JOIN `warehouse` wh ON o.warehouse_id = wh.id
   WHERE o.created_at BETWEEN '2020-11-22' AND '2020-11-28'
     AND os.status != 'Cancelled') orders
GROUP BY WH

如果我没有弄错,您可以:

select 
    wh.code as wh, 
    count(*) as cnt_orders,
    sum(o.delivered_by > o.initial_delivery_date) as cnt_redelivered
    100 * avg(o.delivered_by > o.initial_delivery_date) as percent_redelivered
from `order` o
join `order_status` os on o.id = os.id
join `warehouse` wh on o.warehouse_id = wh.id
where o.created_at between '2020-11-22' and '2020-11-28' and os.status <> 'cancelled'
group by wh.id, wh.code
选择
代码为wh,
将(*)计算为cnt_订单,
作为cnt重新交付的金额(o.交付人>o.初始交付日期)
100*平均值(o.交付日期>o.初始交付日期)作为重新交付百分比
从'order'o
在o.id=os.id上加入'order_status'操作系统
在o.warehouse\u id=wh.id上加入'warehouse'wh
其中o.在“2020-11-22”和“2020-11-28”之间创建了_,且os.状态为“已取消”
按wh.id、wh.code分组

如果您能提供示例数据,那就更好了。哇,太棒了!这完全有效!这让我的问题变得更短!谢谢GMB:)