首页 > 解决方案 > 是否可以在同一个查询中使用按“不同计数”分组的结果?

问题描述

我之前问过一个问题,为什么我用 GROUP BY 得到了不正确的 COUNT DISTINCT 计算?现在我明白为什么了。

但是,同一客户可能会在不同的渠道中被复制——这是一个问题。

我在这个问题上的主要目标是按渠道计算互动客户的百分比。

表交互

CustomerID | Channel | Response
-----------+---------+----------
 245       | SMS     | Accept   
 245       | PUSH    | Ignore   
 247       | SMS     | Accept   
 249       | PUSH    | Ignore   

公式很简单:

Percentage_by_channel = Customers_number_by_channel * 100 / All_customers

所以我想知道是否可以进行这样的 SQL 查询?

在按渠道获取客户编号之前,我无法获取 All_customers。但是我需要在按渠道获取结果时计算百分比。这是一个问题。

您能否给我正确的方法来进行 SQL 查询“按渠道计算互动客户的百分比”?

更新:期望的结果:

 Channel | Customers_number | Customers_percentage
---------+------------------+----------------------
 SMS     |   1000           |       10             
 PUSH    |   3000           |       30             
 CALL    |   6000           |       60             

标签: sqldb2

解决方案


如果您希望数字加起来达到 100%,如您的示例所示,请使用窗口函数:

SELECT channel, 
       (count(distinct customerid) * 1.0 /
        sum(count(distinct customerid)) over ()
       ) as ratio
FROM interactions
GROUP BY channel;

请注意,客户可以在多个渠道中进行交互,因此这实际上是客户-渠道对的比率。

否则,a_horse_with_no_name 对所有客户都有解决方案,但数字不会增加到 100%。


推荐阅读