2017-08-22 1 views
0

Quelqu'un peut-il m'aider à écrire cette requête sans compter? « Certains metteurs en scène dirigé plus d'un film. Pour tous ces administrateurs, retourner les titres de tous les films réalisés par eux, ainsi que le nom du directeur. Trier par nom de directeur, puis le titre du film. (Sans COUNT.)Écrire une requête SQL sans compter

mID | title     | director 
-------------------------------------- 
101 |Gone with the Wind  |Victor Fleming 
102 |Star Wars    |George Lucas 
103 |The Sound of Music  |Robert Wise 
104 |E.T.     |Steven Spielberg 
105 |Titanic     |James Cameron 
106 |Snow White    |<null> 
107 |Avatar     |James Cameron 
108 |Raiders of the Lost Ark |Steven Spielberg 
+6

Cela ressemble à des devoirs. –

+0

Que faire de dans le nom du réalisateur? – Amit

+3

Qu'avez-vous essayé jusqu'à présent? –

Répondre

1

Vous pouvez utiliser ROW_NUMBER() et un CTE ou d'un sous-requête. Ne pas utiliser COUNT() est assez stupide si. Il est un cas idéal pour un tel agrégat.

with cte as(
select 
    director 
    ,title 
    ,row_number() over (partition by director order by title) as rn 
from 
    yourTable) 

select 
    director, 
    title 
from cte 
where director in (select director from cte where rn > 1) 
order by 
    director, 
    title 
3

Vous pouvez comparer pour chaque administrateur min et max du Si elles sont différentes - il y en a plus de 1.

Select mid, title, director 
From tbl 
where director in (Select director 
           From tbl 
           Group by director 
           Having max(mid) > min (mid)) 
order by director, title 
+0

Une autre bonne idée. UV de moi. Vous pouvez également utiliser 1+. – scsimon

1

Que pensez-vous de cela?

select t.* 
from t join 
    (select director, sum(1) as cnt 
     from t 
     group by director 
    ) d 
    on t.director = d.director 
where cnt > 1 
order by director, title;