2016-07-29 4 views
0

Ist es möglich, die HAVING-Klausel in Vertica nur auf einige meiner Spalten zu verwenden? Auf der Suche nach dem effizientesten Weg, da ich es mit Millionen von Zeilen zu tun habe.Vertica - Filter Ergebnisse mit HAVING nur auf einige Spalten

Hier ist ein Beispiel dafür, was ich versuche zu tun: die Tabelle t Gegeben :

A | B | number 
--+---+------- 
a | c | 1 
a | c | 2 
a | d | 1 
b | e | 1 
b | e | 1 
c | c | 1 

Wenn ich laufen:

SELECT A, B, sum(number) as total 
FROM t 
GROUP BY 1, 2 
HAVING sum(number) >= 2 

I erhalten:

A | B | total 
--+---+------ 
a | c | 3 
b | e | 2 

Ich möchte irgendwie in der Lage sein, die HAVING-Bedingung nur auf Spalte A anzuwenden, und nicht auf die (A, B) -Kombination, so dass mein Ergebnis wirklich sein wird:

SELECT A, B, sum(number) as total 
FROM t 
WHERE A IN (
    SELECT A 
    FROM t 
    GROUP BY 1 
    HAVING sum(number) >= 2 
) 
GROUP BY 1, 2 

Aber gibt es einen besseren Weg:

A | B | total 
--+---+------ 
a | c | 3 
a | d | 1 
b | e | 2 

Ich glaube, ich es so tun könnte?

+0

Sie müssen erklären, was die HAVING-Bedingung nur auf Spalte A anwenden soll. In Ihrem zweiten Beispiel geben Sie 'a | zurück d | 1 'so wie ist das mit 'HAVING (a)> 2' –

+0

Sorry für die späte Antwort. Der Grund 'a | d | 1 erscheint, weil, da das "HAVING" nur für die Spalte A gilt, die Summe für a "1 + 2 + 1 = 4" ist, also sollte alles, was daran beteiligt ist, erscheinen ('a | c 'und' a | e'). Danke für deine freundliche Hilfe. –

Antwort

0

Ihre Anfrage sieht gut aus.

Sie könnten analytische Funktionen verwenden, aber nicht sicher, ob dies die Leistung verbessert. Sie sollten versuchen, uns den Plan zu erklären.

Verwandte Themen