2

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

idPerson 是制作电影的人,pesonType '1' 是演员,'2' 是导演。我需要导演和演员以及他们合作电影的人数。

例如,导演 idPeroson = 3 与演员 idPerson = 14 合作拍摄 2 部电影。

| idFilm | idPerson | peronType |
+---------+---------+--------+
| 1       | 14      | 1      |
| 1       | 3       | 2      |
| 1       | 34      | 1      |
| 2       | 3       | 2      |
| 2       | 14      | 1      |
+---------+---------+--------+

我要疯了。非常感谢你。抱歉英语不好

4

3 回答 3

3

试试这个:

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;

SQL 小提琴演示

这会给你:

| DIRECTOR | ACTOR | COUNTS |
-----------------------------
|        3 |    14 |      2 |
|        3 |    34 |      1 |
于 2013-01-03T12:33:22.010 回答
2

获得同样好的结果的更有效方法是:

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 中的子查询非常划算。

于 2013-01-03T13:28:36.830 回答
0

这将为您提供制作电影数量的人,

select idperson,count(distinct idfilm) NoOfFilms,
case when persontype=2 then 'Director' else 'Actor' end Profession
from table1
group by idperson

SQL_LIVE_DEMO

样本输出:

    IDPERSON    NOOFFILMS   PROFESSION
        3             2      Director
       14             2      Actor
       34             1       Actor
于 2013-01-03T12:29:55.267 回答