我有两个表,我不会查询一些数据。问题是查询永远不会停止,也从不给出任何结果。
任务是获得所有男演员的百分比。
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';
答案 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'