在sql中计算百分比时出错

bttbmeg0  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(343)

我试图根据代码中案例部分提到的三个不同案例来计算订单的百分比。当我运行代码时,每种情况的值将百分比值显示为“1”。我想问题出在代码的最后一行,我该怎么解决这个问题?

SELECT DATEDIFF_GRP,ROUND(COUNT(DISTINCT(ORDER_ID))*100/(SELECT COUNT(DISTINCT(A.ORDER_ID)) FROM A),2)||'%' AS PERCENTAGE_ORDERS  FROM A
GROUP BY DATEDIFF_GRP ;
flmtquvp

flmtquvp1#

你可以在下面试试-在我看来,你是想用 || 运营商mysql支持 concat() 功能不可用 || 操作人员

WITH A AS (SELECT OS.ACTUAL_DISPATCH_DATE,OT.ORDER_ID,OT.First_msg_date,datediff(OT.First_msg_date,OS.ACTUAL_DISPATCH_DATE) AS DATEDIFF,
CASE WHEN  datediff(OT.First_msg_date,OS.ACTUAL_DISPATCH_DATE)<=0 THEN 'OTIF' 
    WHEN  datediff(OT.First_msg_date,OS.ACTUAL_DISPATCH_DATE)=1 THEN 'OTIF+1'
    WHEN  datediff(OT.First_msg_date,OS.ACTUAL_DISPATCH_DATE)=2 THEN 'OTIF+2'
    ELSE  'OTIF+>2'
END as DATEDIFF_GRP
FROM order_shipment OS RIGHT JOIN 
(SELECT ORDER_ID,MIN((str_to_date(SUBSTRING(MESSAGE,INSTR(MESSAGE,'2'),10),'%Y-%m-%d'))) AS First_msg_date 
FROM ORDER_TIMELINE
GROUP BY ORDER_ID ) OT
ON (OS.ORDER_ID=OT.ORDER_ID)) 
SELECT DATEDIFF_GRP,concat(ROUND(COUNT(DISTINCT(ORDER_ID))*100/(SELECT COUNT(DISTINCT(A.ORDER_ID)) FROM A),2),'%') AS PERCENTAGE_ORDERS  
FROM A
GROUP BY DATEDIFF_GRP ;
2g32fytz

2g32fytz2#

mysql通常不使用 || 对于字符串连接,您必须启用一些非默认选项才能获得此结果。
现在的情况是mysql正在解释 || 作为逻辑 OR 接线员。要完全避免此问题,请考虑使用 CONCAT 功能。

SELECT
    DATEDIFF_GRP,
    CONCAT(100 * ROUND(COUNT(DISTINCT(ORDER_ID)) /
        (SELECT COUNT(DISTINCT(A.ORDER_ID)) FROM A), 2), '%') AS PERCENTAGE_ORDERS
FROM A;

您还可以通过启用 ANSI 但是正如下面的评论,很少有mysql用户在这种模式下使用数据库。

相关问题