我有一个简单的表,其中包含年份和客户ID,现在我想按年份分组并计算每年的不同客户。这很简单,而且效果很好,我的问题是我不希望第一年的客户在第二年重复,我只希望看到每年的新客户。那我该怎么办呢?
我尝试将count与group by分开使用,甚至没有使用,但似乎不起作用,它总是让我重复输入值
select count (distinct customer ID), Year
FROM customers
group by year
让我说2015年至2019年我有100个客户 现在我有
Year No of Customers
2015 30
2016 35
2017 40
2018 30
2019 10
总计145(大于100表示45) 我想要的是
Year No of Customers
2015 30
2016 30
2017 20
2018 20
2019 10
Total 100
答案 0 :(得分:1)
如果您只想计算出现的第一年的客户,请使用两个汇总级别:
select min_year, count(*)
from (select customerid, min(year) as min_year
from customers c
group by customerid
) c
group by min_year
order by min_year;
要获取total
,可以使用grouping sets
或rollup
(并非所有数据库都支持这些。典型的方法是:
select min_year, count(*)
from (select customerid, min(year) as min_year
from customers c
group by customerid
) c
group by min_year with rollup;
答案 1 :(得分:0)
也许是这样的:
SELECT count (distinct c1.customerID), c1.Year
FROM customers c1
WHERE c1.customerID not in (
SELECT c2.customerID
FROM customers c2
WHERE c2.year < c1.year
)
GROUP BY year