这是一张非常基本的表格。我有第1列和第2列,需要生成第3列。第3列只是给定行的所有Number
除以Name
的{{1}}列的总和。
Number
我正在努力解决如何获取数字行的总数并将其用作计算其余部分的值。
编辑:我希望将此作为单个查询而不是两个单独的查询。
答案 0 :(得分:14)
您只需要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
答案 1 :(得分:5)
如果我这样做,我将首先存储一个包含总数的变量,如下所示:
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示例。
答案 2 :(得分:3)
您可以通过子选择获得它:
SELECT Name, Number, Number * 100 / (select sum(Number) FROM MYTABLE) AS '% of total'
FROM mytable