这是一张非常基本的表格.我有第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 JOIN
在SUM()
中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)
如果这样做,我将从存储一个保存总数的变量开始,如下所示:
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示例。
归档时间: |
|
查看次数: |
27456 次 |
最近记录: |