Mysql SQL运行百分比
我在MySQL数据库中有以下数据: 用户ID |胶片|选择 其中选项为1或0。我想创建一个谷歌图表,在每部电影之后有百分比选择(1s)。我可以在excel中生成以下内容: 有没有一种方法可以在不在表中创建新列的情况下生成包含这些运行总计的结果?(与SUM类似)Mysql SQL运行百分比,mysql,sql,Mysql,Sql,我在MySQL数据库中有以下数据: 用户ID |胶片|选择 其中选项为1或0。我想创建一个谷歌图表,在每部电影之后有百分比选择(1s)。我可以在excel中生成以下内容: 有没有一种方法可以在不在表中创建新列的情况下生成包含这些运行总计的结果?(与SUM类似) 第一行应该是1,但设置为0只是为了使图形看起来更好 第一行应该是100%,对吗?1票赞成,1票赞成等于100% create table runningp(id int auto_increment primary key, choic
第一行应该是1,但设置为0只是为了使图形看起来更好 第一行应该是100%,对吗?1票赞成,1票赞成等于100%
create table runningp(id int auto_increment primary key, choice tinyint);
insert into runningp(choice) values (1),(0),(0),(1),(1),(0),(1),(1),(0),(0);
select r.*, @p:=@p+choice, @t:=@t+1, @p/@t as yes
from runningp r,
(select @p:=0, @t:=0) v
order by id;
+----+--------+---------------+----------+--------+
| id | choice | @p:=@p+choice | @t:=@t+1 | yes |
+----+--------+---------------+----------+--------+
| 1 | 1 | 1 | 1 | 1.0000 |
| 2 | 0 | 1 | 2 | 0.5000 |
| 3 | 0 | 1 | 3 | 0.3333 |
| 4 | 1 | 2 | 4 | 0.5000 |
| 5 | 1 | 3 | 5 | 0.6000 |
| 6 | 0 | 3 | 6 | 0.5000 |
| 7 | 1 | 4 | 7 | 0.5714 |
| 8 | 1 | 5 | 8 | 0.6250 |
| 9 | 0 | 5 | 9 | 0.5556 |
| 10 | 0 | 5 | 10 | 0.5000 |
+----+--------+---------------+----------+--------+
要仅选择所需内容,请执行以下操作:
select id, choice, yes from (
select r.*, @p:=@p+choice, @t:=@t+1, @p/@t as yes
from runningp r,
(select @p:=0, @t:=0) v
order by id
) sq
order by id;
+----+--------+--------+
| id | choice | yes |
+----+--------+--------+
| 1 | 1 | 1.0000 |
| 2 | 0 | 0.5000 |
| 3 | 0 | 0.3333 |
| 4 | 1 | 0.5000 |
| 5 | 1 | 0.6000 |
| 6 | 0 | 0.5000 |
| 7 | 1 | 0.5714 |
| 8 | 1 | 0.6250 |
| 9 | 0 | 0.5556 |
| 10 | 0 | 0.5000 |
+----+--------+--------+
10 rows in set (0.00 sec)
假设@fancyPants是正确的(通常是正确的),那么您也可以这样编写(稍微简单一些,可伸缩性较差)
选择x*
,总和(y.选择)/计数(*)*100%
来自电影《选择x》
加入影展
在y.film上,我认为类似“选择…(计数(答案)/计数(*)为平均值”的内容可能对您有效。为什么第一个结果为0?为什么第二个结果是0.5%——或者应该是50%!?!不管怎样,为什么?我只是将第一个设置为0,所以我没有得到一个奇怪的图形!那么在这个表中创建了一个新表?不能用和SUM(创建临时列)相同的方法来完成?不,没有创建新表。你也可以用草莓汁。这很好,也很容易理解,但我想当你有大量数据时,我的性能会更好。我如何在其中包含WHERE子句,只允许选择特定的用户ID?如果没有看到你的DDL(和/或SQLFIDLE)以及期望的结果,我真的无法评论。
SELECT x.*
, SUM(y.choice)/COUNT(*) * 100 pct
FROM film_choice x
JOIN film_choice y
ON y.film <= x.film
GROUP
BY x.film;