SQL百分比查询

时间:2010-11-24 20:17:24

标签: sql postgresql

我有两个表,我不会查询一些数据。问题是查询永远不会停止,也从不给出任何结果。

任务是获得所有男演员的百分比。

filmparticipation(partid, personid, filmid, parttype)

person(personid, lastname, firstname, gender)

她是我的尝试,有人可以给我一个提示来完成任务吗?

SELECT (COUNT(p.personid) / COUNT(a.person)) * 100
FROM person p, person a, filmparticipation f
WHERE
f.parttype = 'cast' AND
p.gender = 'M';

3 个答案:

答案 0 :(得分:5)

你的联接没有ON条款,所以你加入每个记录与三个表中的每个其他记录!相反,尝试这样的事情:

select (count(case when p.gender = 'M' then 1 end) / count(*)) * 100
from person p
inner join filmparticipation f on p.personid = f.personid
where f.parttype = 'cast' 

答案 1 :(得分:1)

怎么样:

SELECT (COUNT(p.personid) / subq.total) * 100
FROM person p, (select count(personID) as total from person) subq, filmparticipation f
WHERE
f.parttype = 'cast' 
and f.personid = p.personid    
and p.gender = 'M';

认为您之前遇到的问题是您从person选择了两次而没有加入第二个选择(a),可能会导致笛卡尔联接(最终会回来,但也许不会这样)。

答案 2 :(得分:0)

嗯,问题的一部分是你没有加入表 - 你没有给查询任何关系,所以它试图聚合所有表中所有记录的所有可能组合。你想要这样的东西:

SELECT COUNT(p.personid) AS ActorCount, 
       SUM(CASE WHEN p.gender = 'M' THEN 1 ELSE 0 END) AS MaleActorCount, 
       (SUM(CASE WHEN p.gender = 'M' THEN 1 ELSE 0 END) / COUNT(p.personid) * 100) AS PercentMaleActors
FROM person p
INNER JOIN filmparticipation f ON p.personid = f.personid
WHERE f.parttype = 'cast'