2017-07-27 12 views
0

Unter der Annahme, die folgende SQL-Tabelle in Redshift arbeiten:Eine Abfrage, die aus irgendeinem Grund nicht

CREATE TABLE test_data (
field1 varchar(50), 
field2 varchar(50), 
counter int NOT NULL DEFAULT 0 
) 

und folgende Daten:

INSERT INTO test_data (field1, field2, counter) VALUES ('10','zyx',10); 
INSERT INTO test_data (field1, field2, counter) VALUES ('10','mnb',2); 
INSERT INTO test_data (field1, field2, counter) VALUES ('20','abc',15); 
INSERT INTO test_data (field1, field2, counter) VALUES ('20','zyx',5); 
INSERT INTO test_data (field1, field2, counter) VALUES ('20','mnb',1); 

Ich versuche, die folgende Abfrage auszuführen:

Diese Abfrage läuft gut in MySQL, aber ich kann es nicht in Redshift ausführen, die mit dem folgenden bombs:

Gibt es eine praktikable, elegante Arbeit? Ich denke, es kann mit einer temporären Tabelle gemacht werden, aber ich überprüfe, ob es dafür keine bessere Lösung gibt.

+0

FWIW, ist Redshift von PostgreSQL abgeleitet, nicht MySQL, wenn Sie also Möchten Sie Abfragen auf Ihrem lokalen Computer testen, verwenden Sie PostgreSQL. –

+0

@ BillKarwin Ich bin mir dessen bewusst, aber ich hatte keine psql-Installation handlich, also habe ich gerade in mysql versucht zu sehen, wie es damit umgehen wird. –

Antwort

2

Eine separate Unterabfrage und ein Werk in Redshift verbinden und der Code viel sauberer ist (markiert gegen MySQL Ergebnis und das gleiche bekam):

SELECT x.field1, coalesce(y.f,'UNKNOWN'), sum(counter) as c 
FROM test_data x 
LEFT JOIN (
    SELECT field2 AS f 
    FROM test_data 
    GROUP BY 1 
    ORDER BY sum(counter) DESC 
    LIMIT 2 
) y 
ON x.field2=y.f 
GROUP BY 1,2 
Verwandte Themen