我正在尝试在符合特定条件的数据集中找到女性的比例:公司ID,工作类别,性别,时间范围,州ID和州类型。为了做到这一点,我必须将符合这一标准的女性总数除以符合标准的男性和女性总数。 我目前正在查询数据,以便在工程中从公司20中找到#females,其中kind和id = 0并将其除以符合该标准的#男性和女性总数:
/* number of females in eng. jobs */
(SELECT 1.0*sum(hiring_sample_count)
FROM metrics m
JOIN category c ON
m.job_id = c.job_id
AND m.company_id = 20
AND c.standard_job_cat = 'Engineering'
AND dimension_value = 'Female'
AND time_frame = 'ALLTIME'
AND state_kind = 0
AND state_item_id =0) /
/* number of m+f in eng */
(SELECT sum(hiring_sample_count)
FROM metrics m
JOIN category c ON
m.job_id = c.job_id
AND m.company_id = 20
AND c.standard_job_cat = 'Engineering'
AND (dimension_value = 'Female'
OR dimension_value = 'Male')
AND time_frame = 'ALLTIME'
AND state_kind = 0
AND state_item_id =0))
问题是我想为所有工作类别,种类和ID中的数据集中的所有公司计算这个。我不确定如何在不指定这些人的情况下做到这一点,并且想知道是否有人可以提供帮助。我使用的是SQLWorkbench,它是一个独立于DBMS的跨平台SQL查询工具。我将不胜感激(我不使用TSQL或PL / pgSQL)。
也为格式化道歉。
答案 0 :(得分:0)
只需使用条件聚合:
SELECT AVG(CASE WHEN dimension_value = 'Female' THEN 1.0 ELSE 0.0 END) as female_proportion
FROM metrics m JOIN
category c
ON m.job_id = c.job_id
WHERE m.company_id = 20 AND
c.standard_job_cat = 'Engineering' AND
time_frame = 'ALLTIME' AND
state_kind = 0 AND
state_item_id = 0;
答案 1 :(得分:0)
您需要按照您想要识别女性百分比的列表列表进行分组,它会分别生成计数。计数本身是由条件聚合产生的:
SELECT
m.company_id
,c.standard_job_cat
,time_frame
,state_kind
,state_item_id
,sum(case when dimension_value = 'Female' then hiring_sample_count else 0 end) as females
,sum(hiring_sample_count) as total
,1.0*sum(case when dimension_value = 'Female' then hiring_sample_count else 0 end)/sum(hiring_sample_count) as female_proportion
FROM metrics m
JOIN category c
ON m.job_id = c.job_id
GROUP BY 1,2,3,4,5
ORDER BY 1,2,3,4,5;
添加了 1.0*
以避免整数除法,并且仅提供females
和total
列来感知上下文