我有一个输出下表的查询:
(0) Age <= 19----------76-------0.12
(1) Age 20 – 24--------661------1.06
(2) Age 25 – 29-------4060------6.53
(3) Age 30 – 34-------7231------11.64
(4) Age 35 – 39-------9281------14.94
(5) Age 40 – 44-------9539------15.35
Total ----------------30848 -----49.65
第一列是特定细分的名称。第二列是该细分中的人数。
第三列是该段中人数占整个表的百分比。请注意,总数仅为整个基数的50%左右。
我需要的是另一列,即该段中人员的百分比,仅为此基数的百分比。所以第一行的公式是(76/30848)* 100,这将给出76作为30848的百分比。问题是在使用ROLLUP查询结束之前,数字30848是未知的。我该怎么做呢?
答案 0 :(得分:1)
我更喜欢第一个查询,但您的数据库可能不支持它。
SELECT
segment,
COUNT(*) AS people,
100 * people / SUM(people) OVER () AS percentage
FROM table1
GROUP BY
segment;
SELECT
t1.segment,
COUNT(*) AS people,
100 * t1.people / t2.total_people AS percentage
FROM table1 t1
CROSS JOIN (
SELECT
COUNT(*) AS total_people
FROM table1) t2
GROUP BY
segment;
答案 1 :(得分:0)
我对你的回答有点困惑。也许我需要更好地解释布局。
这是一个查询,可以为20-24岁和30-34岁的两组人员提供结果。
SELECT CONCAT('(',s.code,') ',s.description) as `Segment`, count(`Age`) AS `Records Selected`,
ROUND((count(`Age`)/(SELECT count(*) FROM mainTable))*100, 2)
AS `Percentage of Total`
FROM segment_fields s, mainTable c
WHERE `segment` = 'Age' AND `code` = `Age` AND `c`.`Age` IN ('1', '3')
GROUP BY `Age` WITH ROLLUP
很抱歉它看起来很乱。基本上我需要在“总数百分比”之后的新专栏与“总分百分比”相同。但是,除了划分整个基数之外,它只会除以查询ROLLUP的结果记录数。