【问题标题】:How to properly using a GROUP BY statement in SQL?如何在 SQL 中正确使用 GROUP BY 语句?
【发布时间】:2019-03-27 06:19:50
【问题描述】:

我需要对潜在客户数据库运行查询,该数据库需要细分商店名称、该商店的潜在客户总数以及转换后的潜在客户总数。到目前为止,以下是我得到的:

SELECT  stores.store_name as Store, COUNT(*) as "Total Lead", 
        (SELECT COUNT(*) as "Converted Lead" FROM leads WHERE lead_status_id = 5) 
FROM "leads" 
INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id" 
INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id" 
INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id" 
INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id" 
GROUP BY store_name;

但是,这是错误的,因为转换的部分计算了所有转换的潜在客户,而不是某个商店。我得到的结果如下:

 +------------+-------------+----------------+
 | Store      | Total Lead  | Converted Lead |
 +------------+-------------+----------------+
 | Store1     |         10  |            10  |
 | Store2     |         14  |            10  |
 | Store3     |         17  |            10  |
 +------------+-------------+----------------+

目前在“已转化的潜在客户”列中列出了所有商店中已转化的潜在客户总数。 “Converted Lead”列假设 Store1 为 4,Store2 为 3,Store3 为 4。我试图做 sub-groupby,但是,我得到了一个错误,因为每个商店会有超过 1 行。我需要查询计算每个商店的转换潜在客户,如下所示:

 +------------+-------------+----------------+
 | Store      | Total Lead  | Converted Lead |
 +------------+-------------+----------------+
 | Store1     |         10  |             4  |
 | Store2     |         14  |             3  |
 | Store3     |         17  |             4  |
 +------------+-------------+----------------+

有人能指出我正确的方向吗?谢谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以尝试使用条件聚合函数代替子查询。

    SELECT  stores.store_name as Store, COUNT(*) as "Total Lead", 
            COUNT(CASE WHEN lead_status_id = 5 THEN 1 END) "Converted Lead" 
    FROM "leads" 
    INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id" 
    INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id" 
    INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id" 
    INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id" 
    GROUP BY store_name;
    

    如果你使用mysql,你可以尝试使用COUNT(lead_status_id = 5)

    SELECT  stores.store_name as Store, COUNT(*) as "Total Lead", 
            COUNT(lead_status_id = 5) "Converted Lead" 
    FROM "leads" 
    INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id" 
    INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id" 
    INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id" 
    INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id" 
    GROUP BY store_name;
    

    【讨论】:

      【解决方案2】:

      您没有将子查询与商店名称相关联。虽然这可以在其 where 子句中完成,但更简单的方法是计算 case 表达式以仅计算具有相关状态的潜在客户:

      SELECT  stores.store_name as Store, 
              COUNT(*) as "Total Lead", 
              COUNT(CASE lead_status_id WHEN 5 THEN 1 END) AS "Converted Lead"
      FROM "leads" 
      INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "leads"."id" 
      INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id" 
      INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id" 
      INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id" 
      GROUP BY store_name;
      

      【讨论】:

        【解决方案3】:

        请试试这个。

        SELECT  stores.store_name as Store, COUNT(*) as "Total Lead", 
                (SELECT COUNT(*) as "Converted Lead" FROM leads AS SS WHERE SS.id =A.id AND lead_status_id = 5) 
        FROM "leads" AS A 
        INNER JOIN "employee_leads" ON "employee_leads"."lead_id" = "A"."id" 
        INNER JOIN "employees" ON "employees"."id" = "employee_leads"."employee_id" 
        INNER JOIN "emp_stores" ON "emp_stores"."employee_id" = "employees"."id" 
        INNER JOIN "stores" ON "stores"."id" = "emp_stores"."store_id" 
        GROUP BY store_name;
        

        【讨论】:

          猜你喜欢
          • 2013-08-26
          • 2012-11-23
          • 2015-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-15
          相关资源
          最近更新 更多