获取列总和并用于计算总数的百分比(mySQL)

jon*_*ich 11 mysql

这是一张非常基本的表格.我有第1列和第2列,需要生成第3列.第3列只是Number所有列的总和Name除以Number给定行.

| Name          | Number        | % of total  |
| ------------- |:-------------:| -----:      |
| Bob           | 5             |  25         |
| Sally         | 10            |  50         |
| John          | 5             |  25         |
Run Code Online (Sandbox Code Playgroud)

我正在努力解决如何获取数字行的总数并将其用作计算其余部分的值.

编辑:如果可能的话,我希望将此作为单个查询而不是两个单独的查询.

Gio*_*sos 16

你只需要CROSS JOINSUM()Number柱:

SELECT Name, Number, Number * 100 / t.s AS `% of total`
FROM mytable
CROSS JOIN (SELECT SUM(Number) AS s FROM mytable) t
Run Code Online (Sandbox Code Playgroud)

在这里演示


小智 5

您可以通过子选择获得它:

SELECT Name, Number, Number * 100 / (select sum(Number) FROM MYTABLE) AS '% of total'
FROM mytable
Run Code Online (Sandbox Code Playgroud)


Ada*_*331 5

如果这样做,我将从存储一个保存总数的变量开始,如下所示:

SET @total := (SELECT SUM(number) FROM myTable);
Run Code Online (Sandbox Code Playgroud)

一旦有了该变量,就可以运行一个查询,以获取每一行的百分比,如下所示:

SELECT name, number, (number / @total) * 100 AS percentage
FROM myTable;
Run Code Online (Sandbox Code Playgroud)

如果您不想使用变量,则可以将该子查询移至select语句中:

SELECT name, number, (number / (SELECT SUM(number) FROM myTable)) * 100 AS percentage
FROM myTable;
Run Code Online (Sandbox Code Playgroud)

这是每种方法的SQL Fiddle示例。

  • 需要明确的是,mysql中的@variable会持续连接的期限,并且是该连接的本地变量。因此,如果您进行连接,设置变量,然后继续使用该变量运行查询,则不会有问题。此外,如果您有多个连接,所有设置和使用相同的变量名称,则它们每个都有自己的“副本”,并且不会在另一个连接上更新/更改相同的变量。 (2认同)