繁体   English   中英

在Select语句中使用子查询

[英]Using Subquery in Select statement

我有一个查询,输出以下表格:

(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。 我将如何去做呢?

我更喜欢第一个查询,但是您的数据库可能不支持它。

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;

我对你的答案有点困惑。 也许我需要解释一下布局。

此查询可为年龄在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的结果的记录数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM