MySQL在select查询中使用生成列

Mec*_*eer 8 php mysql

我有一个MySQL查询运行一个简短的操作(总计一个select语句中的计数),我想使用结果进行数学运算,但我收到一个错误.

表:

id  |   group   |   count   |
-----------------------------
1       1           3
2       1           2
Run Code Online (Sandbox Code Playgroud)

查询:

select id, count,
  (select sum(count) from table group by group) as total,
  count/total as percent 
from table
Run Code Online (Sandbox Code Playgroud)

该错误是因为表中没有真正的"总"列.如何使查询工作?

Roc*_*mat 23

您可以保存total变量,然后在除法计算中使用它.

SELECT 
  `id`, `count`, 
   @total:=(SELECT sum(`count`) FROM `table` GROUP BY `group`) AS `total`, 
  `count`/@total AS `percent` 
FROM `table`
Run Code Online (Sandbox Code Playgroud)

注意:GROUP是MySQL中的保留字.你应该将它(和所有其他字段/表名)括在反引号(`)中.

  • MySQL文档警告不要这样做."作为一般规则,除了在SET语句中,你不应该为用户变量赋值并在同一语句中读取值....你可能得到你期望的结果,但这不能保证." 请参阅http://dev.mysql.com/doc/refman/5.7/en/user-variables.html (10认同)

Rag*_*dda 6

您也可以在不引入变量的情况下执行此操作:

select id, 
   count, 
   (select sum(count) from `table` group by `group`) as total, 
   (select count/total) as percent 
from `table`;
Run Code Online (Sandbox Code Playgroud)

生产:

+------+-------+-------+---------+
| id   | count | total | percent |
+------+-------+-------+---------+
|    1 |     3 |     5 |  0.6000 |
|    2 |     2 |     5 |  0.4000 |
+------+-------+-------+---------+
2 rows in set (0.05 sec)
Run Code Online (Sandbox Code Playgroud)