我在 MySQL 数据库中有以下数据:
用户ID | 电影 | 选择
其中选择是 1 或 0。我想在每部电影之后创建一个带有百分比选择(1 秒)的谷歌图表。我可以在 excel 中生成它,如下所示:
有没有一种方法可以生成具有这些运行总计的结果,而无需在表中创建新列?(类似于 SUM)
第一行应该是 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 是正确的(通常是正确的),那么您也可以这样写(稍微简单且可扩展性较差)...
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;