mysql - 联合查询的总百分比
问题描述
我想计算每个月不同类的百分比,每个类都取自一个单独的基础(person1、person2 和 person3),知道这三个基础包含相同的类名。并且我想要三个碱基的总百分比。我试图这样做,但得到的百分比与我拥有的真实值不同。
select 100*count(distinct person)/max(all_1) as percent_1,class,bb.month from (select * from person_1) aa inner join (select count (person) as all_1, month from person_1 group by month) bb on aa.month = bb.month group by class,bb.month
union select 100*count(distinct person)/max(all_2) as percent_2,class,bb.month from (select * from person_2) aa inner join (select count (person) as all_2, month from person_2 group by month)bb on aa.month = bb.month group by class,bb.month
union select 100*count(distinct person)/max(all_3) as percent_3,class,bb.month from (select * from person_3) aa inner join (select count (person) as all_3, month from person_3 group by month)bb on aa.month = bb.month group by class,bb.month
示例:(第 1 个月) 基础 person_1
班级 | 人 |
---|---|
1 | 阿尼斯 |
1 | 阿米尔 |
2 | 塔塔 |
3 | 托托 |
3 | 蒂蒂 |
3 | 咪咪 |
基地人_2
班级 | 人 |
---|---|
1 | 巴巴 |
1 | 碧波 |
1 | 阿霞 |
2 | 猕猴桃 |
3 | 北 |
3 | 阿迈勒 |
我想要的结果是百分比:
月 | 班级 | 丁腈橡胶 | 百分 |
---|---|---|---|
1 | 1 | 5 | 42% |
1 | 2 | 2 | 16% |
1 | 3 | 5 | 42% |
解决方案
SELECT class, COUNT(*) nbr, 100 * COUNT(*) / SUM(COUNT(*)) OVER () percent
FROM ( SELECT class
FROM person_1
UNION ALL
SELECT class
FROM person_2 ) total
GROUP BY class
推荐阅读
- wpf - WPF DataGrid - 禁用 DataGridCheckBoxColumn
- json - Azure ARM模板中concat函数和资源id函数的区别
- debian - wlan0:通过本地选择取消身份验证
- google-cloud-platform - 解决“超出配额 N2_CPUS”
- excel - 定位分配有宏的条纹右箭头
- jquery - 如何使用多个收音机在 jquery 中隐藏/显示内容
- angular - Angular 控制台错误未通过单元测试
- encryption - 加密数据是否包含空格?
- input - isNumberKey 与 truncateDecimals 结合导致输入字段中出现异常舍入
- latex - 在 Latex 投影仪中,如何在幻灯片上绘制大箭头