2017-08-22 2 views
0

Kann mir jemand helfen, wie diese Abfrage geschrieben wird, ohne zu zählen? „Einige Regisseure mehr als ein Film. Für alle diese Regisseure, kehren die Titel aller Filme von ihnen gerichtet, zusammen mit dem Regisseur Namen. Sortieren nach Regisseur Namen, dann Filmtitel. (Ohne COUNT.)Schreiben SQL-Abfrage ohne Anzahl

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

Das sieht wie Hausaufgaben aus. –

+0

Was tun von in Director Name? – Amit

+3

Was hast du bisher versucht? –

Antwort

1

Sie können ROW_NUMBER() und einen CTE oder Unterabfrage verwenden. Nicht mit COUNT() obwohl ziemlich albern ist. Es ist ein Idealfall für ein solches Aggregat.

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

Sie für jeden Leiter des die min und max vergleichen Mitte Wenn sie unterschiedlich sind - gibt es mehr als 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

Eine andere gute Idee. UV von mir. Sie können auch 1+ verwenden. – scsimon

1

Wie wäre es damit?

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;