是否可以在同一查询中使用按“不同的计数”结果分组?

时间:2018-12-03 13:49:46

标签: sql db2

我在Why I got the incorrect calculation of COUNT DISTINCT with GROUP BY?之前问了一个问题,现在我明白了为什么。

但是同一客户可以在不同渠道中重复的事实-这是一个问题。

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

表互动

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
  • Customers_number_by_channel-是唯一选择项。
  • All_customers-是所有渠道的客户总数。

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

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

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

更新:所需结果:

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

1 个答案:

答案 0 :(得分:0)

如果您希望数字加起来达到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%。