2017-03-04 3 views
2
+--------+-------+----------+-----------+ 
| Maker | Model | SeatType | NoOfSeats | 
+--------+-------+----------+-----------+ 
| Airbus | 340 | E  |  220 | 
| Airbus | 340 | F  |  20 | 
| Airbus | 380 | E  |  300 | 
| Airbus | 380 | F  |  60 | 
| Boeing | 747 | E  |  300 | 
| Boeing | 747 | F  |  40 | 
| Boeing | 777 | E  |  200 | 
| Boeing | 777 | F  |  20 | 
| Boeing | 787 | E  |  250 | 
| Boeing | 787 | F  |  25 | 
+--------+-------+----------+-----------+ 

Unten ist mein Versuch, eine Abfrage dieser „PlaneSeats“ Tabelle zu erstellenSQL Zählung Gesamt

select Maker, count(distinct Model) 
from PlaneSeats 
group by Maker, Model 
having SUM(NoOfSeats) > 350; 

und hier ist das Ergebnis Abfrage

+--------+-----------------------+ 
| Maker | count(distinct Model) | 
+--------+-----------------------+ 
| Airbus |      1 | 
+--------+-----------------------+ 

aber, was ich will zu bekommen, ist der Hersteller und die Gesamtzahl der von diesem Hersteller hergestellten Flugzeuge, auch für Hersteller, die jedes Flugzeug mit einer Gesamtzahl von mehr als 350 Sitzen herstellen. Ich verstehe, dass die Anzahl hier 2 statt 1 sein sollte, da es 2 Modelle für Maker Airbus gibt. Bitte helfen Sie mir herauszufinden, wo es falsch ist. Vielen Dank.

+0

Sie bekommen Anzahl 1, da Hersteller Airbus mit dem Modell „380“ verfügt über 360 Sitzplätze, aber Boeing Maker einem Modell nicht Sitze mehr als 350 –

+1

@Poorva Ja, ich verstehe diesen Teil, indem ich auf den Tisch schaue. Danke;) – Misuti

Antwort

1

Ich glaube, Sie brauchen zwei Aggregationsebenen:

select maker, count(*) 
from (select maker, model, sum(NoOfSeats) as numseats 
     from planeseats ps 
     group by maker, model 
    ) mm 
where numseats > 350 
group by maker; 

EDIT:

Sie möchten, dass alle Ebenen für ein Make gezählt werden, wenn man groß genug ist. Das heißt, die where auf eine having Klausel drehen:

select maker, count(*) 
from (select maker, model, sum(NoOfSeats) as numseats 
     from planeseats ps 
     group by maker, model 
    ) mm 
group by maker 
having max(numseats) > 350; 
+0

Könnten Sie bitte mehr über diese 2 Aggregationsebenen erklären? Auch ich habe versucht, den obigen Code in und es stellt sich heraus, um 1 anstelle von 2 zu sein. – Misuti

+0

Ich * denke * das OP will die Gesamtzahl der Modelle vom Hersteller gemacht, unabhängig von der Anzahl der Sitze - so lange wie mindestens ein Modell hatte mehr als 350 Sitze. – Strawberry

+0

@Strawberry. . . Vielen Dank. Ich denke deine Interpretation ist richtig. –