我有一个类似下面的表...我需要他们使用表格下面的查询的数据。我需要的是计算公式为sum(column3)/ total(column3)* 100或((0.3333 / 0.9999)* 100)的百分比。我已经搜索了但是我没有找到任何使用mysql的东西。它甚至可能吗?谁能给我一些提示?
+----------+---------+----------+--------+
| column1 | column2 | column3 | percentage |
+----------+---------+---------+------------+
| negative | 1 | 0.3333 | % |
| neutral | 1 | 0.3333 | % |
| positive | 1 | 0.3333 | % |
+----------+---------+----------+-----------+
| Total | 3 | 0.9999 | % |
+----------+---------+----------+-----------+
SELECT
column1_text,
sum(column2_number) as 'column2',
sum(column3_number) as 'column3',
percentage_here as 'percentage'
FROM table
GROUP BY column1 ASC WITH ROLLUP
答案 0 :(得分:2)
我们可以使用内联视图来计算总数,并进行连接操作。
这样的事情:
SELECT t.column1
, SUM(t.column2_number) AS `column2`
, SUM(t.column3_number) AS `column3`
, ( 100.0
* SUM(t.column3_number)
/ s.col3_tot
) AS `percentage`
FROM `table` t
CROSS
JOIN ( SELECT SUM(q.column3_number) AS col3_tot
FROM `table` q
) s
GROUP
BY t.column1
, s.col3_tot
ORDER
BY t.column1 ASC
MySQL运行内联视图查询以实现派生表s
,其中包含一行,总共有column3_number。
该行已连接到t
返回的每一行,因此值col3_tot
在每一行都可用,我们可以在SELECT列表中的表达式中使用它。
(我省略了WITH ROLLUP
条款,以明确WITH ROLLUP
与获取总数或计算百分比无关。)