SQL Query排序并实现Unique Count
Posted
技术标签:
【中文标题】SQL Query排序并实现Unique Count【英文标题】:SQL Query to sort and achieve Unique Count 【发布时间】:2021-03-28 07:11:58 【问题描述】:我有一张包含以下详细信息的表格
Customer | Deal | DealStage | Year |
---|---|---|---|
A | D1 | Lost | 2019 |
A | D2 | Won | 2019 |
A | D3 | Contacted | 2020 |
B | D4 | Conatcted | 2020 |
B | D5 | Lost | 2020 |
C | D6 | Lost | 2020 |
D | D7 | Lost | 2020 |
我必须开发一个查询,我应该在其中获得每个客户每年唯一的最高阶段。阶段优先级为赢 > 联系 > 输。例如,A 有三笔交易,分别是赢、输和已联系。所以我应该考虑赢。同样联系了 B 和丢失了 C 和 D
是否有可能得到类似的输出
Customer | HighestStage2019 | HighestStage2020 |
---|---|---|
A | Won | |
B | Contacted | |
C | Lost | |
D | Lost |
这样,我可以生成一个看起来像这样的数据透视表
Stage | CustomerCount2019 | CustomerCount2020 |
---|---|---|
Won | 1 | |
Contacted | 1 | |
Lost | 2 |
提前致谢
【问题讨论】:
请不要只要求我们解决问题或为您编写解决方案。欢迎初学者,但我们希望您付出一些努力在提出问题之前解决您自己的问题。尽管我们非常愿意帮助您解决您编写的代码的问题,但我们不会为您编写代码。 【参考方案1】:您可以按如下方式使用条件聚合:
Select stage,
count(case when year = 2019 then 1 end) as year2019,
count(case when year = 2020 then 1 end) as year2020
From
(Select t.*,
row_number() over (partition by customer, year
order by case when dealstage = 'won' the 1
When dealstage = 'contacted' then 2
else 3 end) as rn
From your_table t) t
Where rn = 1
Group by stage;
【讨论】:
以上是关于SQL Query排序并实现Unique Count的主要内容,如果未能解决你的问题,请参考以下文章