sql查询以获取合作伙伴的数量
我需要SQL查询方面的帮助。我有这个连接表,有22486行 Iperson是电影工作者,pesonType“1”是演员,“2”是导演。我需要得到导演和演员以及他们在电影上合作的人数 例如,导演Iderson=3与演员Iderson=14合作拍摄两部电影sql查询以获取合作伙伴的数量,sql,Sql,我需要SQL查询方面的帮助。我有这个连接表,有22486行 Iperson是电影工作者,pesonType“1”是演员,“2”是导演。我需要得到导演和演员以及他们在电影上合作的人数 例如,导演Iderson=3与演员Iderson=14合作拍摄两部电影 | idFilm | idPerson | peronType | +---------+---------+--------+ | 1 | 14 | 1 | | 1 | 3 | 2
| idFilm | idPerson | peronType |
+---------+---------+--------+
| 1 | 14 | 1 |
| 1 | 3 | 2 |
| 1 | 34 | 1 |
| 2 | 3 | 2 |
| 2 | 14 | 1 |
+---------+---------+--------+
我快发疯了。非常感谢你。很抱歉英语不好这将为您提供制作大量电影的人员
select idperson,count(distinct idfilm) NoOfFilms,
case when persontype=2 then 'Director' else 'Actor' end Profession
from table1
group by idperson
样本输出:
IDPERSON NOOFFILMS PROFESSION
3 2 Director
14 2 Actor
34 1 Actor
试试这个:
SELECT DISTINCT
d.idPerson AS Director,
p.idPerson AS Actor,
(SELECT COUNT(p2.idfilm)
FROM Persons p2
INNER JOIN Persons d2 ON p2.idFilm = d2.idFilm
AND d2.peronType = 2
WHERE p2.peronType = 1
AND p2.idperson = p.idperson
AND d2.idperson = d.idperson ) Counts
FROM Persons p
INNER JOIN Persons d ON p.idFilm = d.idFilm
AND d.peronType = 2
WHERE p.peronType = 1;
这将为您提供:
| DIRECTOR | ACTOR | COUNTS |
-----------------------------
| 3 | 14 | 2 |
| 3 | 34 | 1 |
获得同样好结果的更有效方法是:
SELECT
D.idPerson Director,
P.idPerson Actor,
count(1) NBFilm
FROM Persons D
INNER JOIN Persons P ON D.idFilm = P.idFilm
WHERE P.peronType = 1
AND D.peronType = 2
GROUP BY D.idPerson, P.idPerson
因此,您将只有一个内部联接。select中的子查询可以非常经济高效。您使用哪种RDBMS?你想做一个自加入吗?@bonCodigo:什么是UR?@a_horse_,没有名字:它是
select right('you',1)+''+子字符串('are',2,1)
…)@Kaf好的一个:D是的,我的意思是说你是不是和Group By一起数数,我不知道它的存在(真丢脸)。看起来真的很有效!