2016-04-01 12 views
0

Ich habe ein lustiges Problem in Postgresql.auswählen ohne leere Zeilen in Postgresql

select sum(value1) as v1, 
    sum(value2) as v2, 
    sum(value3) as v3, 
    sum(value4) as v4, 
    sum(value5) as v5, 
    ... 
from (select * from test limit 0)x; 

Ergebnis:

v1 | v2 | v3 | v4 | v5 | ... 
-----+-----+-----+-----+-----+--... 
    |  |  |  |  | ... 
(1 row) 

Erwartet: (0 Zeile).

Wahrheit: (1 Reihe).

Ich möchte keine leeren Zeilen bekommen. Wie kann ich korrekte Ergebnisse für diesen Fall erhalten? Danke.

+0

Die Abfrage wird ** ** immer eine leere Zeile zurück, weil 'Limit 0 'bedeutet„keine Zeilen überhaupt“. Also, wenn du das nicht willst, warum benutzt du überhaupt "limit 0"? Die Abfrage macht keinen Sinn –

+0

Ich meine Ergebnisse für meine Abfrage haben einige leere Zeilen mit ** Summe **. Obige Abfrage ist ein Fall, um dieses Problem zu reproduzieren, und wir sind sicher, hier nichts zu summieren. –

+0

Die erwartete Abfrage für oben ist 0 Zeilen, nicht 1 Zeile. –

Antwort

1

können Sie eine having-Klausel verwenden Nullwerte herausgefiltert werden:

select sum(id) 
from ( 
    select * 
    from test limit 0 
) x 
having sum(id) is not null; 
+0

Vielen Dank für Ihre Hilfe. Ich benutze diese Klausel, aber ich hoffe, einige Möglichkeiten sind besser, weil ich 20+ Summenklausel auf Auswahl haben, und ich muss 20+ für zu haben. –

+0

@ ThịnhNguyễnThái: Sie sollten diese wichtige Information in Ihre Frage aufgenommen haben. Die Frage zu erweitern, nachdem Sie eine Antwort erhalten haben, ist nicht nett –

+0

Ja, bemerkte ich. Vielen Dank! –

Verwandte Themen