2017-12-28 7 views
0
SELECT SUM(man+woman) AS over65, 
     a.cod, 
     a.city, 
     b.cod2 
    FROM a LEFT JOIN 
     b ON b.cod2 = a.cod 
GROUP BY cod 

-SUM ohne dupliziert Reihe mit GROUP BY

table a 
cod city 
28001 rome 
28001 rome 
28002 milan 
28002 milan 

table b 
cod2 age man woman 
28001 65 156 220 
28001 66 250 280 
28001 67 350 483 
28002 65 556 524 
28002 66 650 683 
28002 67 450 342 

result Is: 
cod city over65 
28001 rome 3478 
28002 milan 6410 

instead Of : 
cod  city over65 
28001 rome  1739 
28802 milan 3205 

Was soll ich dafür tun? danke

+3

Hallo, willkommen zu StackOverflow. Bitte fügen Sie Ihre Beispieldaten in Ihrer Frage als Text hinzu. Auf diese Weise können wir unsere Lösungen testen. Sehen Sie [hier] (https://meta.stackoverflow.com/a/271056/460557), wie man eine gute SQL-Frage richtig stellt. –

+0

Ok. Danke, ich werde Dokumentation für den nächsten Beitrag lesen – cloude

Antwort

1

Verwenden Sie eine Unterabfrage, um die Duplikate in Tabelle a loszuwerden.

SELECT SUM(man+woman) AS over65, 
     a.cod, 
     a.city, 
     b.cod2 
    FROM (SELECT DISTINCT cod, city 
     FROM a) AS a 
    LEFT JOIN 
     b ON b.cod2 = a.cod 
GROUP BY a.cod 

Ich frage mich auch, warum Tabelle a diese Duplikate in erster Linie hat. Wenn city für eine gegebene cod immer gleich ist, sind die Daten nicht ordnungsgemäß normalisiert.

+0

danke für Hilfe. Ist nicht dupliziert, habe ich andere Spalten aus der Tabelle entfernt – cloude

+1

Es ist immer noch nicht richtig normalisiert. Wenn "Kabeljau" immer die gleiche "Stadt" hat, sollten Sie das in einer anderen Tabelle haben, wo "Kabeljau" eine eindeutige ID ist und "Stadt" ein Wert ist. – Barmar

+0

Ja, in 'a' Tabelle habe ich eindeutige ID und mehr Spalten, aber hier habe ich es entfernt. Abfrage funktioniert gut, ist aber sehr langsam für Ergebnisse, weil ich etwa 20000 Datensätze in der Tabelle habe. – cloude