我有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;
但是它不起作用。你能帮我吗?
答案 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