每次购物期间购买3种以上CD的客户数量

时间:2019-02-09 12:18:07

标签: sql sql-server

我有2张桌子 首先是CD的名称,每个CD的ID和价格。

CD
ID   NAME          PRICE
1    Maria Carey    5
2    Michael Jakson 2
3    Rihanna        3
4    Beyonce        2
5    Jay Z          3

第二个是特定数据

SALES
    CLIENT_ID   CD_ID  AMOUNT SHOP      DATE
    1             12     34   New York   2000-03-12
    2             12     4   Los Angeles 2000-03-14
    3             42     3    Chicago    2001-03-24
    4             32     16   New York   2001-05-19
    2             12     16   New York   2001-05-19
    2             42     16   New York   2001-05-19
    4             32     16   New York   2001-05-19

我解决的想法

   SELECT DISTINCT Sales.Client_id
    FROM Sales s
    GROUP BY s.Client_id, s.Amount, s.Date
    HAVING COUNT(*) > 3;

但是它不起作用。你能帮我吗?

2 个答案:

答案 0 :(得分:1)

您想从一次访问中购买的CD数量开始。假设“访问”是客户/商店/日期的组合,则执行以下计算:

SELECT s.Client_id, s.shop, s.Date, count(distinct cd_id) as cnt
FROM Sales s
GROUP BY s.Client_id, s.shop, s.Date;

注意:您的数据无法区分一天内两次去同一家商店的客户。

接下来,问题是客户是否总是购买至少3张CD。这是客户级别的另一个汇总级别。您要在此处进行过滤:

SELECT ClientId, MIN(cnt) as minimum_cds
FROM (SELECT s.Client_id, s.shop, s.Date, count(distinct cd_id) as cnt
      FROM Sales s
      GROUP BY s.Client_id, s.shop, s.Date
     ) csd
GROUP BY ClientId
HAVING MIN(cnt) >= 3;

答案 1 :(得分:0)

如果您使用的是SQL Server 2012+,则可以尝试以下操作:

  Select countQuery.Client_id from
    (
      select distinct s.Client_id , sum(1) 
      over (partition by s.Client_id,s.CD_ID) counts3
      from #Sales s
    ) countQuery
    Where countQuery.counts3>=3