【问题标题】:GROUP BY First_Name but show COUNT of the corresponding Last_Name SQLGROUP BY First_Name 但显示对应 Last_Name SQL 的 COUNT
【发布时间】:2014-07-25 15:26:14
【问题描述】:

我有一个 SQL 语句,它将按 First_Name 计算出现次数和分组,但出于其他目的,我需要知道有多少家庭成员是客户以及使用相同的姓氏的 COUNT。 这是我写的代码。

SELECT a.Last_Name, a.First_Name,
SUM(CASE WHEN b.ITM = 'P_10' THEN 1 ELSE 0 END) AS P_10_COUNT
FROM CUST_PROFILE
INNER JOIN ORDER b
ON a.ID = b.ID
GROUP BY a.First_Name, a.Last_Name;

我对如何编写代码有一个粗略的想法(也许),见下文....

SELECT a.Last_Name, a.First_Name,
SUM(CASE WHEN b.ITM = 'P_10' THEN 1 ELSE 0 END) AS P_10_COUNT,
COUNT(c.Name_Count)
FROM CUST_PROFILE
INNER JOIN ORDER b
ON a.ID = b.ID
LEFT JOIN (select Last_Name, count(DISTINCT First_Name) Name_Count
from CUST_PROFILE
GROUP BY Last_Name) c
GROUP BY a.First_Name, a.Last_Name;

【问题讨论】:

    标签: sql count distinct


    【解决方案1】:

    看起来一切正常,您只需要JOIN您的子选择

    SELECT a.Last_Name, a.First_Name,
    SUM(CASE WHEN b.ITM = 'P_10' THEN 1 ELSE 0 END) AS P_10_COUNT,
    COUNT(c.Name_Count)
    FROM CUST_PROFILE
    INNER JOIN ORDER b
    ON a.ID = b.ID
    LEFT JOIN (select Last_Name, count(DISTINCT First_Name) Name_Count
    from CUST_PROFILE
    GROUP BY Last_Name) c ON c.Last_Name = a.Last_Name
    GROUP BY a.First_Name, a.Last_Name; 
    

    【讨论】:

    • 这个语法是我一直在寻找的,但如果他们也购买了 p_10,它只计算其他名字,有没有办法在计算家庭成员时排除它。
    【解决方案2】:
    SELECT a.Last_Name, a.First_Name,
    SUM(CASE WHEN b.ITM = 'P_10' THEN 1 ELSE 0 END) AS P_10_COUNT,
    c.Name_Count
    FROM CUST_PROFILE
    INNER JOIN ORDER b
    ON a.ID = b.ID
    LEFT JOIN (select Last_Name, count(DISTINCT First_Name) Name_Count
    from CUST_PROFILE
    GROUP BY Last_Name) c ON c.Last_Name = a.Last_Name
    GROUP BY a.First_Name, a.Last_Name,c.Name_Count; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2012-07-18
      • 2011-02-03
      • 2014-11-07
      • 1970-01-01
      相关资源
      最近更新 更多