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

したがって、内部結合は 1 つだけになります。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 に答える