sql - 是否可以在同一个查询中使用按“不同计数”分组的结果?
问题描述
我之前问过一个问题,为什么我用 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
Customers_number_by_channel
- 是计数不同的选择。All_customers
- 是所有渠道客户的总和。
所以我想知道是否可以进行这样的 SQL 查询?
在按渠道获取客户编号之前,我无法获取 All_customers。但是我需要在按渠道获取结果时计算百分比。这是一个问题。
您能否给我正确的方法来进行 SQL 查询“按渠道计算互动客户的百分比”?
更新:期望的结果:
Channel | Customers_number | Customers_percentage
---------+------------------+----------------------
SMS | 1000 | 10
PUSH | 3000 | 30
CALL | 6000 | 60
解决方案
如果您希望数字加起来达到 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%。
推荐阅读
- woocommerce - 如何从 WooCommerce 操作更新订单元数据
- r - GLMM 中的 Gamma 分布
- twitch - 如何在抽搐流聊天中显示所有可用命令?
- python - 遍历odoo 14中的对象
- javascript - 如何在使用 Bootstrap 和 HTML5 填充来自 Google Sheet 的数据的 Google Sheet Apps 脚本中添加“数据列表”
- c# - 如何使用 OleDbDataAdapter 在 C# 中获取所有 Excel 工作表数据
- r - 在我的 rstudio 上用我的窗口笔记本电脑安装 tidyr 包
- python - Pandas:无法将数据透视表信息插入到不同的工作表中
- laravel - 使用 Axios 发出 POST 请求时 CSRF 令牌不匹配
- spring - Spring Kafka Producer 阻塞 http 线程直到 Kafka 线程完成