给出一个表格,用于以下命令:
select sex, count(*) from my_table group by sex;
select sex, employed, count(*) from my_table group by sex, employed;
Run Code Online (Sandbox Code Playgroud)
得到:
sex | count
-------+------
male | 1960
female | 1801
Run Code Online (Sandbox Code Playgroud)
和:
sex | employed | count
---------+----------+-------
male | f | 1523
male | t | 437
female | f | 1491
female | t | 310
Run Code Online (Sandbox Code Playgroud)
我在编写查询时遇到困难,该查询将计算每个性别组中的就业百分比.所以输出应该如下所示:
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)
Run Code Online (Sandbox Code Playgroud)
小智 27
可能为时已晚,但对于即将到来的搜索者,可能的解决方案可能是:
select sex, employed, COUNT(*) / CAST( SUM(count(*)) over (partition by sex) as float)
from my_table
group by sex, employed
Run Code Online (Sandbox Code Playgroud)
通过IO统计,这似乎是最有效的解决方案 - 可能取决于要查询的行数 - 在上面的数字上测试...
同样的态度可用于获得男/女比例:
select sex, COUNT(*) / CAST( SUM(count(*)) over () as float)
from my_table
group by sex
Run Code Online (Sandbox Code Playgroud)
此致,Jan
out*_*tis 10
您可以使用子选择和连接来执行此操作:
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;
Run Code Online (Sandbox Code Playgroud)
我无法想到其他方法.