sql - 列出现的百分比分布?
问题描述
我正在寻找一种方法来计算表中列值的分布。例如,如果我有两行包含“红色”和“蓝色”,每行应该有 50%。我想计算出现的次数col
并将其与总行数进行比较。
我的尝试:
SELECT
log_domain,
count(log_domain),
count(log_domain) over(),
ROUND(
COUNT(log_domain)
/
COUNT(*) OVER()
,2) AS percentage
FROM logs
GROUP BY log_domain
有什么帮助吗?谢谢!
解决方案
只需注意整数除法。我经常乘以 1.0:
SELECT log_domain, COUNT(*), COUNT(*) OVER (),
ROUND(COUNT(*) * 1.0 / SUM(COUNT(*)) OVER (), 2) as ratio
FROM logs
GROUP BY log_domain;
我还注意到分母需要是SUM(COUNT(*))
而不是COUNT(*)
。您的版本只是除以结果集中的行数——即log_domain
.
推荐阅读
- python - Panda to_datetime 引发警告:tzname CET 已识别但不理解
- c# - System.Windows.Forms.Screen 在显示更改后未更新
- amazon-ec2 - 如何使用 Boto3 将工作负载从一个 ec2 实例迁移到另一个实例
- python - 如何模拟本地 aws 上下文进行测试
- google-places-api - Google maps-places api 找不到类型:鱼塘
- git - .editorconfig - 是否允许两个不同风格的开发人员更容易地 git 合并?
- azure - Azure DevOps REST API - 获取作业的代理池?
- excel - Excel VBA 将文本框(文本和格式)复制到另一个文本框(无 ActiveX / 用户表单)
- r - 使用 `pdp::partial` 并行化部分图会产生 `invalid connection`
- kubernetes - HorizontalPodAutoscaler 基于自定义指标的缩放 - 节点池级别指标