使用分组依据防止重复值并同时计数不同?

时间:2019-10-24 22:32:53

标签: sql-server database group-by count distinct

我有一个简单的表,其中包含年份和客户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 

2 个答案:

答案 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 setsrollup(并非所有数据库都支持这些。典型的方法是:

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