我有两个表(Master和标签)和以下SQL:
select t.label, m.demographic_sex, count(*) from
Master m
LEFT OUTER JOIN tags t ON t.interaction_id = m.interaction_id
where m.demographic_sex is not null
group by t.label, m.demographic_sex
;
输出:
label demographic_sex count(*)
------------------------------
label_a Female 117845
label_a Male 45966
BOTH Female 6476
BOTH Male 4406
label_b Female 364984
label_b Male 261089
如何为每个标签计算每个性别的百分比?
答案 0 :(得分:1)
您可以将其放入子查询并将总计数加入其中,然后计算平均值。
SELECT t.*, t.sex_count / t1.total_count as AVG_PER
FROM(
select t.label, m.demographic_sex, count(*) as sex_count from
Master m
LEFT OUTER JOIN tags t ON t.interaction_id = m.interaction_id
where m.demographic_sex is not null
group by t.label, m.demographic_sex
) t
JOIN (
SELECT COUNT(*) as total_count FROM Master m
LEFT OUTER JOIN tags t ON t.interaction_id = m.interaction_id
where m.demographic_sex is not null
group by m.demographic_sex
) t1 ON t1.label = t.label
GROUP BY t.label, t.demographic_sex
如果您可以发布一些相关数据,我可以尝试并设计一个更简单的解决方案......但如果没有它我就无法测试数据。所以我不能保证结果
答案 1 :(得分:1)
你可以尝试一下吗?
SELECT t.label, m.demographic_sex, COUNT(*), COUNT(*) / total_t.total_cnt
FROM Master m LEFT OUTER JOIN tags t ON t.interaction_id = m.interaction_id
INNER JOIN (SELECT label, COUNT(*) AS total_cnt
FROM tags
GROUP BY label
) total_t ON total_t.label = t.label
WHERE m.demographic_sex is not null
GROUP BY t.label, m.demographic_sex ;
total_t
包含每个label
的总计数。