Sql 计算组内的百分比

Sql 计算组内的百分比,sql,Sql,给定一个表,其中包含以下命令: select sex, count(*) from my_table group by sex; select sex, employed, count(*) from my_table group by sex, employed; 给出: sex | count -------+------ male | 1960 female | 1801 以及: 我在写一个查询时遇到了困难,这个查询将计算每个性别组的就业率。因此,输出应如下所示: se

给定一个表,其中包含以下命令:

select sex, count(*) from my_table group by sex;
select sex, employed, count(*) from my_table group by sex, employed;
给出:

  sex  | count 
-------+------
male   | 1960 
female | 1801
以及:

我在写一个查询时遇到了困难,这个查询将计算每个性别组的就业率。因此,输出应如下所示:

 sex     | employed | count  | percent
---------+----------+--------+-----------
 male    | f        |  1523  | 77.7% (1523/1960)
 male    | t        |   437  | 22.3% (437/1960)
 female  | f        |  1491  | 82.8% (1491/1801)
 female  | t        |   310  | 17.2% (310/1801)

您可以使用子选择和联接来执行此操作:

SELECT t1.sex, employed, count(*) AS `count`, count(*) / t2.total AS percent
  FROM my_table AS t1
  JOIN (
    SELECT sex, count(*) AS total 
      FROM my_table
      GROUP BY sex
  ) AS t2
  ON t1.sex = t2.sex
  GROUP BY t1.sex, employed;

我想不出其他的方法了。

可能太晚了,但对于即将到来的搜索者来说,可能的解决方案是:

select sex, employed, COUNT(*) / CAST( SUM(count(*)) over (partition by sex) as float)
  from my_table
 group by sex, employed
通过IO统计,这似乎是最有效的解决方案-可能取决于要查询的行数-在上面的数字上进行测试

同样的态度也可用于获得男性/女性百分比:

select sex, COUNT(*) / CAST( SUM(count(*)) over () as float)
  from my_table
 group by sex
问候,,
Jan

非常感谢,经过一些小修改后,您的解决方案成功了!可能重复的
select sex, COUNT(*) / CAST( SUM(count(*)) over () as float)
  from my_table
 group by sex