2016-09-10 3 views
1

Ich arbeite derzeit an Universität Management-Projekt, wo ich die Kapazität jedes Gebäudes berechnen wollen, wenn der Fall jede Abteilung kann verschiedene Abschnitte wie unten halten (comp und wählen im selben Gebäude) i eine Abfrage geschrieben, wo ich Gesamtsumme Kapazität bin immer die unerwünscht ist meine Frage ist:So berechnen Sie individuelle Summe der ausgewählten Spalte

select sum(distinct capacity) 
from classroom 
where building in (select building from department group by building) 

i am als 660 bin immer !! verwende ich sum und distinct an falschen Stellen in dieser verschachtelten Abfrage? Wie bekommt man die Kapazität des einzelnen Gebäudes?

department 
+------------+----------+-----------+ 
| dept_name | building | budget | 
+------------+----------+-----------+ 
| Biology | Watson | 90000.00 | 
| Comp. Sci. | Taylor | 100000.00 | 
| Elec. Eng. | Taylor | 85000.00 | 
| Finance | Painter | 120000.00 | 
| History | Painter | 50000.00 | 
| Music  | Packard | 80000.00 | 
| Physics | Watson | 70000.00 | 
+------------+----------+-----------+  
classroom 
+----------+-------------+----------+ 
| building | room_number | capacity | 
+----------+-------------+----------+ 
| Packard | 101   |  500 | 
| Painter | 514   |  10 | 
| Taylor | 3128  |  70 | 
| Watson | 100   |  30 | 
| Watson | 120   |  50 | 
+----------+-------------+----------+ 

Antwort

0

Da Sie nur überprüfen wollen, Kapazitäten von Gebäuden, die in department Tabelle vorhanden sind, müssen Sie für jede building eine Summe über capacity berechnen undhinzufügenKlausel nur die Gebäude zu zeigen, dass Wohnungen für mindestens eine Wohnung sind:

select 
    building, sum(capacity) as capacity 
from classrom c 
where exists (
    select 1 
    from department d 
    where c.building = d.building 
) 
group by building 

Wenn Sie nur Kapazitäten benötigen, unabhängig von Existenz Gebäude in department dann die exists Klausel fallen:

select 
    building, sum(capacity) as capacity 
from classrom 
group by building 
+0

Tysm arbeitete wie ein Charme :) .. räumte meine Zweifel – minigeek

+0

Erwägen [eine Antwort zu akzeptieren] (http://meta.stackexchange.com/questions/5234/ wie-akzeptiere-eine-Antwort-Arbeit) wenn du es hilfreich findest. –

+0

wie man das macht .. Ich bin neu angemeldet und der Ruf ist nicht viel zu erhöhen :( – minigeek

-1

Verwenden folgende Abfrage:

SELECT building, SUM(capacity) as total_capacity 
FROM classroom 
GROUP BY building; 

Wenn Sie sicherstellen möchten, dass es mindestens 1 Abteilung in diesem Gebäude ist dann verwenden inner join

SELECT classroom.building, SUM(capacity) as total_capacity 
FROM classroom 
INNER JOIN department 
    ON classroom.building == department.building 
GROUP BY classroom.building; 
+0

ty zum ersten antwort aber 2. Abfrage zeigt falsche Ausgabe :) – minigeek

+0

Sorry ich habe mich von WHERE falsch eingelesen. Siehe meine Bearbeitung. –

+0

immer noch die gleiche Ausgabe zeigt .. egal ur Ans ohne Join funktioniert :) – minigeek

Verwandte Themen