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

Posted

技术标签:

【中文标题】获取列总和并用于计算总数的百分比(mySQL)【英文标题】:Get column sum and use to calculate percent of total (mySQL) 【发布时间】:2015-05-28 14:14:31 【问题描述】:

这是我的桌子的一个非常基本的外观。我有第 1 列和第 2 列,需要生成第 3 列。第 3 列只是所有NameNumber 列的总和除以给定行的Number

| Name          | Number        | % of total  |
| ------------- |:-------------:| -----:      |
| Bob           | 5             |  25         |
| Sally         | 10            |  50         |
| John          | 5             |  25         |

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

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

【问题讨论】:

你事先有第二列的总和吗? @SalmonKiller 不,我不知道。这是棘手的部分(对我来说)。尝试获取该值,然后在一个查询中使用它。 【参考方案1】:

您只需要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

Demo Here

【讨论】:

这对我有用...谢谢!一个问题。如果我想添加一个WHERE 子句(例如WHERE name="Bob"),那会放在哪里?我试图把它放在FROM mytable 之后,但出现错误。 @jonmrich 这取决于您要过滤的内容。是应用SUM 的行吗?然后你必须在CROSS JOINSELECT 中进行操作。否则,WHERE 必须放在 CROSS JOIN 之后。 你可以想象,我的实际表比这复杂得多。我有多个具有相同名称的列(代表同一个人),我需要将每个实例加在一起(例如 Bob 的总数)并将其除以 Number 列的总数。这就是我想挂断电话的地方。 @jonmrich 我认为this 可能是您正在寻找的。​​span> 谢谢...我在正确的地方使用了一些 group bywhere【参考方案2】:

如果我这样做,我会首先存储一个保存总数的变量,如下所示:

SET @total := (SELECT SUM(number) FROM myTable);

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

SELECT name, number, (number / @total) * 100 AS percentage
FROM myTable;

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

SELECT name, number, (number / (SELECT SUM(number) FROM myTable)) * 100 AS percentage
FROM myTable;

以下是每种方法的 SQL Fiddle 示例。

【讨论】:

我从未使用过存储变量。它存储多长时间?我可以重写它吗?我需要在单独的查询中运行这些吗?很多问题... @jonmrich 如果我没记错的话,它们是单独运行的,我现在在您的编辑中看到您可能不希望这样做。我相信它在存储过程中更有用。至于它的存储时间,我不确定。它可能只是您当前的部分 知道了……知道未来的好事情,即使它不适用于这里。 需要明确的是,mysql 中的 @variable 会持续您的连接期限,并且是该连接的本地变量。因此,如果您连接、设置变量,然后使用该变量继续运行查询,则不会有问题。此外,如果您有多个连接,所有设置和使用相同的变量名称,它们都有自己的“副本”,并且不会在另一个连接上更新/更改相同的变量。 感谢您的澄清,开发者!【参考方案3】:

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

SELECT Name, Number, Number * 100 / (select sum(Number) FROM MYTABLE) AS '% of total'
FROM mytable

【讨论】:

以上是关于获取列总和并用于计算总数的百分比(mySQL)的主要内容,如果未能解决你的问题,请参考以下文章

用于计算同一列的值百分比的 SQL [关闭]

计算 Power Pivot 模型中总计的百分比

使用 groupby 的 Pandas 占总数的百分比

获取列中值的计数并在图中显示它们的百分比

Delphi DBGrid 中计算的百分比

使用mysql查询计算连续缺席总数和百分比计算