【问题标题】:I m not be able to get correct number of order_status我无法获得正确数量的 order_status
【发布时间】:2014-12-16 11:59:42
【问题描述】:

我正在尝试在连接表中使用 like 来获取 order_registration.status 的计数

SELECT dstr_operator_master.*, 
count(order_registration.status like'%enquiry%') AS order_status, 
count(order_registration.pname) AS destiList 
FROM dstr_operator_master 
left JOIN order_registration 
ON FIND_IN_SET( order_registration.user_id , dstr_operator_master.u_id) 
WHERE dstr_operator_master.status = '1' 
and dstr_operator_master.type ='distributor' 
GROUP BY dstr_operator_master.auto_id

【问题讨论】:

    标签: mysql sql select join count


    【解决方案1】:

    试试这个:

    SELECT d.*, 
           SUM(CASE WHEN o.status LIKE '%enquiry%' THEN 1 ELSE 0 END) AS order_status, 
           COUNT(o.pname) AS destiList 
    FROM   dstr_operator_master d
    LEFT JOIN order_registration o ON FIND_IN_SET(o.user_id, d.u_id) 
    WHERE d.status = '1' AND d.type = 'distributor' 
    GROUP BY d.auto_id;
    

    【讨论】:

      【解决方案2】:

      您的计数可能会返回相同的值,因为COUNT() 会计算非NULL 值的数量。对于第一个,使用SUM() 而不是COUNT()

      SELECT dstr_operator_master.*, 
             SUM(order_registration.status LIKE'%enquiry%') AS order_status, 
             Count(order_registration.pname)                AS destiList 
      . . .
      

      MySQL 将布尔值视为数字上下文中的数字,true 为 1,false 为 0。这就是 SUM() 起作用的原因。

      【讨论】:

        猜你喜欢
        • 2021-03-09
        • 1970-01-01
        • 2017-04-11
        • 2015-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-05
        相关资源
        最近更新 更多