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的主要内容,如果未能解决你的问题,请参考以下文章

sql SQL Query更改where子句中的排序规则。

SQL Query 总是按子句顺序使用文件排序

SQL over的作用及用法

调用未定义的方法 Illuminate\Database\Query\Builder::unique()

SQL QUERY 在对表进行排序后合并连续的相同值

按一个变量排序,按另一个分组,然后在 R 中的 SQL Query 中选择第一行