2016-08-04 16 views
1

Ich habe eine Summe der Werte aus der Spalte2, aber ich sollte es nur einmal pro ID berechnen. Zum Beispiel für die Tabelle unten Ich brauche 5 + 10 + 7 und nicht 5 + 5 + 10 + 7Postgres Summe der Werte eins pro eindeutige ID

id column1 column2 
1 value1 5 
1 value1 5 
2 value1 10 
3 value1 7 

Die letztere ich durch die folgende Abfrage, aber ich weiß nicht, wie es zur Anpassung an Hol dir die erste Summe. Sollte ich die Tabelle vorher filtern wie alle anderen Zeilen?

SELECT column1, sum(column2) FROM table group by column1; 
+2

'Summe (distinct column2)' –

+0

Wenn Sie id benötigen summieren, sollten Sie Gruppe von id. –

+0

Aber was passiert, wenn Sie mehrere verschiedene 'column2' Werte für eine gegebene' id' haben? Welchen sollst du zusammenfassen? In Ihrem Beispiel ist es einfach, weil beide einen Wert von "5" haben. Aber was, wenn sie anders wären? – sstan

Antwort

1

Sie sollten Ihre Daten bereinigen, um die doppelten Zeilen zu entfernen. Aber die folgende Abfrage sollte die Ergebnisse erhalten Sie von id, column1 durch erste Gruppierung wollen die Duplikate zu entfernen:

select column1, sum(column2) 
    from (select id, column1, min(column2) as column2 
      from tbl 
     group by id, column1) t 
group by column1 
+0

Was ist die Bedeutung von min (column2) in Unterabfrage? auch ohne min() tut es nicht das gleiche? – user4658312