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