0

我在 MySQL 数据库中有以下数据:

用户ID | 电影 | 选择

其中选择是 1 或 0。我想在每部电影之后创建一个带有百分比选择(1 秒)的谷歌图表。我可以在 excel 中生成它,如下所示:

擅长

有没有一种方法可以生成具有这些运行总计的结果,而无需在表中创建新列?(类似于 SUM)

第一行应该是 1 但设置为 0 只是为了让图表看起来更好!

4

2 回答 2

1

第一行应该是 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)
于 2013-11-13T10:56:38.873 回答
1

假设@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;
于 2013-11-13T11:04:19.167 回答