如何解决使用按值分组的 Sum 和 Percent WHERE 数据获取查询
这是我的桌子:
输入 | 生物 | 人口 |
---|---|---|
HP Universe | 女巫/巫师 | 100,000 |
HP Universe | 麻瓜 | 250,000 |
HP Universe | 其他 | 75,000 |
其他宇宙 | 女巫/巫师 | 500,000 |
其他宇宙 | 麻瓜 | 1,000,000 |
其他宇宙 | 其他 | 175 |
SELECT
CASE WHEN type LIKE '%hp%' THEN 'HP Universe'
ELSE 'Other Universe'
END AS Type,CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards'
WHEN creature LIKE '%muggle%' THEN 'Muggles'
ELSE 'Others'
END AS Creature,COUNT(disTINCT type_id) AS Population
FROM `table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH) AND CURRENT_DATE()
GROUP BY 1,2
ORDER BY 1 DESC
我想添加另一个名为 pct_population
的列,将 population
与 type
相加,然后给我 creature
的百分比。
基本上,我希望我的桌子看起来像这样:
输入 | 生物 | 人口 | Pct_Population |
---|---|---|---|
HP Universe | 女巫/巫师 | 100,000 | 23.5% |
HP Universe | 麻瓜 | 250,000 | 58.82% |
HP Universe | 其他 | 75,000 | 17.68% |
其他宇宙 | 女巫/巫师 | 500,000 | 33.32% |
其他宇宙 | 麻瓜 | 1,000 | 66.65% |
其他宇宙 | 其他 | 175 | 0.01% |
我们基本上是对每个 population
的 type
求和,然后按 creature
分解百分比。
解决方法
您可以从 window function
中受益:
SELECT
CASE WHEN type LIKE '%hp%' THEN 'HP Universe'
ELSE 'Other Universe'
END AS Type,CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards'
WHEN creature LIKE '%muggle%' THEN 'Muggles'
ELSE 'Others'
END AS Creature,COUNT(DISTINCT type_id) AS Population,COUNT(DISTINCT type_id) / count(*) over (partition by CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards' WHEN creature LIKE '%muggle%' THEN 'Muggles' ELSE 'Others' END AS Creature)* 100.0 AS Pct_Population
FROM `table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH) AND CURRENT_DATE()
GROUP BY 1,2
ORDER BY 1 DESC
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。