SQL 中的比例
Proportion in SQL
我的table是这样的
C1 Bool Count
A TRUE 5
A FALSE 5
B FALSE 6
C TRUE 2
C FALSE 8
我想计算每种 Bool 类型的计数部分,按 C1 分组。理想的结果应该是
C1 Bool Portion
A TRUE 0.5
A FALSE 0.5
B FALSE 1
C TRUE 0.2
C FALSE 0.8
我不太确定如何实现这一目标。非常感谢任何帮助
这与您之前的问题非常相似,但没有聚合。
如果你是运行MySQL8.0,可以使用window功能:
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
您可以添加一个子查询来获取 SUM
你也可以四舍五入结果。
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
db<>fiddle here
我的table是这样的
C1 Bool Count
A TRUE 5
A FALSE 5
B FALSE 6
C TRUE 2
C FALSE 8
我想计算每种 Bool 类型的计数部分,按 C1 分组。理想的结果应该是
C1 Bool Portion
A TRUE 0.5
A FALSE 0.5
B FALSE 1
C TRUE 0.2
C FALSE 0.8
我不太确定如何实现这一目标。非常感谢任何帮助
这与您之前的问题非常相似,但没有聚合。
如果你是运行MySQL8.0,可以使用window功能:
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
您可以添加一个子查询来获取 SUM
你也可以四舍五入结果。
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
db<>fiddle here