获取列总和并用于计算总数的百分比(mySQL)
这是我桌子的基本情况。我有第1列和第2列,需要生成第3列。第3列是所有获取列总和并用于计算总数的百分比(mySQL),mysql,Mysql,这是我桌子的基本情况。我有第1列和第2列,需要生成第3列。第3列是所有Name的Number列的总和除以给定行的Number | Name | Number | % of total | | ------------- |:-------------:| -----: | | Bob | 5 | 25 | | Sally | 10 | 50
Name
的Number
列的总和除以给定行的Number
| Name | Number | % of total |
| ------------- |:-------------:| -----: |
| Bob | 5 | 25 |
| Sally | 10 | 50 |
| John | 5 | 25 |
我正在努力解决如何得到数字行的总数,并将其用作计算其余数字的值
编辑:如果可能的话,我希望将其作为一个单独的查询,而不是两个单独的查询。您只需将
交叉连接编号列的SUM()
:
SELECT Name, Number, Number * 100 / t.s AS `% of total`
FROM mytable
CROSS JOIN (SELECT SUM(Number) AS s FROM mytable) t
您可以通过子选择来获得它:
SELECT Name, Number, Number * 100 / (select sum(Number) FROM MYTABLE) AS '% of total'
FROM mytable
如果我这样做,我会先存储一个包含总数的变量,如下所示:
SET @total := (SELECT SUM(number) FROM myTable);
SELECT name, number, (number / @total) * 100 AS percentage
FROM myTable;
一旦有了这个变量,我就可以运行一个查询,得到每行的百分比,如下所示:
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;
以下是每种方法的一个示例。您事先有第二列的总和吗?@SalmonKiller没有。这是(对我来说)棘手的部分。尝试获取该值,然后在一个查询中使用它。这对我有用…谢谢!一个问题。如果我想添加一个WHERE
子句(例如WHERE name=“Bob”
),那会去哪里?我试图将其放在mytable
中的之后,但出现了错误。@jonmrich这取决于您要筛选的内容。是否应用了SUM
的行?然后您必须在交叉连接的选择中执行此操作。否则,其中
必须放在交叉连接
之后。正如您所想象的,实际上我的表要比这个复杂得多。我有多个同名的列(代表同一个人),我需要将这些实例加在一起(例如,Bob的总数),并将其除以数字
列的总数。我想这就是我挂断电话的地方。@jonmrich我想可能就是你要找的。谢谢……我把它都用在了一些group by
和where
的正确位置上。我从来没有用过存储变量。储存多长时间?我可以在上面写吗?我需要在单独的查询中运行这些吗?很多问题…@jonmrich如果我没有弄错的话,它们是分开运行的,我现在在你的编辑中看到,你可能不希望这样。我相信它在存储过程中更有用。至于它能保存多久,我不确定。这可能只是你当前的部分,明白了……以后要知道这一点是件好事,尽管它不适用于这里。要明确的是,mysql中的@变量将持续你的连接期限,并且是该连接的本地变量。因此,如果您连接,设置变量,然后继续使用该变量运行查询,您将不会有问题。此外,如果您有多个连接,所有设置和使用相同的变量名,它们都有自己的“副本”,并且不会在另一个连接上更新/更改相同的变量。谢谢您的澄清,Dev!