我在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
答案 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%。