Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL中的比例_Mysql_Sql_Sum_Subquery_Window Functions - Fatal编程技术网

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