Mysql SQL中的比例
我的桌子是这样的Mysql SQL中的比例,mysql,sql,sum,subquery,window-functions,Mysql,Sql,Sum,Subquery,Window Functions,我的桌子是这样的 C1 Bool Count A TRUE 5 A FALSE 5 B FALSE 6 C TRUE 2 C FALSE 8 我想计算每种类型Bool的count部分,按C1分组。理想的结果应该是 C1 Bool Portion A TRUE 0.5 A FALSE 0.5 B FALSE 1 C TRUE 0.2 C FALSE
C1 Bool Count
A TRUE 5
A FALSE 5
B FALSE 6
C TRUE 2
C FALSE 8
我想计算每种类型Bool的count部分,按C1分组。理想的结果应该是
C1 Bool Portion
A TRUE 0.5
A FALSE 0.5
B FALSE 1
C TRUE 0.2
C FALSE 0.8
我真的不知道如何做到这一点。非常感谢您的帮助这与您之前的问题非常相似,但没有汇总 如果您运行的是MySQL 8.0,则可以使用窗口函数:
select t.*, count / sum(count) over(partition by c1) ratio
from mytable t
在早期版本中,另一种选择是联接或关联子查询:
select t.*, count / (select sum(t1.count) from mytable t1 where t1.c1 = t.c1) ratio
from mytable t
您可以添加一个子查询以获取总和 也可以对结果进行四舍五入 C1 |布尔|珀尔 :- | :---- | -----: A |真| 0.5000 A |假| 0.5000 B |假| 1.0000 C |真| 0.2000 C |假| 0.8000
dbfiddle也许你应该乘以1.0得到一个浮点结果。等待。。。我认为MySQL默认使用浮点运算。@TheImpler:事实上,MySQL不做整数除法,所以它是这样工作的。
CREATE TABLE table1 (
`C1` VARCHAR(1),
`Bool` VARCHAR(5),
`Count` INTEGER
);
INSERT INTO table1
(`C1`, `Bool`, `Count`)
VALUES
('A', 'TRUE', '5'),
('A', 'FALSE', '5'),
('B', 'FALSE', '6'),
('C', 'TRUE', '2'),
('C', 'FALSE', '8');
SELECT `C1`, `Bool`, `Count` / (SELECT SUM(`Count`) sumcount FROM table1 WHERE `C1` = t1.`C1`) perc
FROM table1 t1
C1 | Bool | perc
:- | :---- | -----:
A | TRUE | 0.5000
A | FALSE | 0.5000
B | FALSE | 1.0000
C | TRUE | 0.2000
C | FALSE | 0.8000