sql查询以获取合作伙伴的数量

sql查询以获取合作伙伴的数量,sql,Sql,我需要SQL查询方面的帮助。我有这个连接表,有22486行 Iperson是电影工作者,pesonType“1”是演员,“2”是导演。我需要得到导演和演员以及他们在电影上合作的人数 例如,导演Iderson=3与演员Iderson=14合作拍摄两部电影 | idFilm | idPerson | peronType | +---------+---------+--------+ | 1 | 14 | 1 | | 1 | 3 | 2

我需要SQL查询方面的帮助。我有这个连接表,有22486行

Iperson是电影工作者,pesonType“1”是演员,“2”是导演。我需要得到导演和演员以及他们在电影上合作的人数

例如,导演Iderson=3与演员Iderson=14合作拍摄两部电影

| 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一起数数,我不知道它的存在(真丢脸)。看起来真的很有效!