Ich versuche, eine Abfrage zu schreiben, die nur die Zeilen zählt, die eine Bedingung erfüllen.Wie können in Redshift/Postgres Zeilen gezählt werden, die eine Bedingung erfüllen?
Zum Beispiel in MySQL ich es so schreiben würde:
SELECT
COUNT(IF(grade < 70), 1, NULL)
FROM
grades
ORDER BY
id DESC;
Allerdings, wenn ich versuche, dass auf Redshift zu tun, es gibt die folgende Fehlermeldung:
ERROR: Funktion if (boolean , Integer, "unbekannt") existiert nicht
Hinweis: Keine Funktion entspricht dem angegebenen Namen und den angegebenen Argumenttypen. Sie müssen möglicherweise explizite Typumwandlungen hinzufügen.
überprüfte ich die Dokumentation für bedingte Anweisungen, und ich fand
NULLIF(value1, value2)
aber es vergleicht nur Wert1 und Wert2 und wenn diese Werte gleich sind, gibt es null.
Ich konnte keine einfache IF-Anweisung finden, und auf den ersten Blick konnte ich keinen Weg finden, zu tun, was ich tun möchte.
Ich versuchte, den CASE-Ausdruck zu verwenden, aber ich bin nicht immer die Ergebnisse Ich möchte:
SELECT
CASE
WHEN grade < 70 THEN COUNT(rank)
ELSE COUNT(rank)
END
FROM
grades
Dies ist der Weg, ich will die Dinge zählen:
gescheitert (Grad < 70)
Durchschnitt (70 < = Grad < 80)
gut (80 < = Grad < 90)
ausgezeichnet (90 < = Grad < = 100)
und das ist, wie ich erwarte, dass die Ergebnisse sehen:
+========+=========+======+===========+
| failed | average | good | excellent |
+========+=========+======+===========+
| 4 | 2 | 1 | 4 |
+========+=========+======+===========+
aber ich bekomme das:
+========+=========+======+===========+
| failed | average | good | excellent |
+========+=========+======+===========+
| 11 | 11 | 11 | 11 |
+========+=========+======+===========+
Ich hoffe, jemand könnte mich in die richtige Richtung zeigen!
Wenn dies hier hilft einige Beispiel-info
CREATE TABLE grades(
grade integer DEFAULT 0,
);
INSERT INTO grades(grade) VALUES(69, 50, 55, 60, 75, 70, 87, 100, 100, 98, 94);
Vielleicht möchten Sie Betreiber BETWEEN? http://www.postgresqltutorial.com/postgresql-between/ –