Alle Kunden und die Zahl ihrer Bestellungen
Liste jeden Kunden mit der Zahl seiner Bestellungen auf: Spalten name und orders_count. Kunden ohne Bestellungen müssen ebenfalls im Ergebnis stehen, mit null.
Wer am meisten bestellt hat, zuerst, und bei gleicher Anzahl nach Namen. Namen können sich wiederholen: das sind verschiedene Kunden.
Tabellen
CREATE TABLE customers (
id int PRIMARY KEY,
name text NOT NULL
);
CREATE TABLE orders (
id int PRIMARY KEY,
customer_id int NOT NULL REFERENCES customers (id),
total numeric(10, 2) NOT NULL
);Strg+Enter führt die Tests aus. Tab rückt ein; um den Editor per Tastatur zu verlassen, drücke Esc und dann Tab. Der Code wird in diesem Browser gespeichert.
Tests (3)
Jeder Test füllt die Tabellen mit eigenen Daten und vergleicht das Ergebnis deiner Abfrage mit dem erwarteten: dieselben Spalten (Namen und Reihenfolge) und dieselben Zeilen in derselben Reihenfolge, ORDER BY zählt also. Die Abfrage läuft in echtem PostgreSQL direkt im Browser; der erste Start lädt es herunter (etwa 5 MB).
INSERT INTO customers VALUES (1, 'Ann'), (2, 'Bob'), (3, 'Cid'); INSERT INTO orders VALUES (1, 1, 10.00), (2, 1, 20.00), (3, 2, 5.00);
-- nobody has ordered yet INSERT INTO customers VALUES (1, 'Ann'), (2, 'Bob');
-- two customers with the same name INSERT INTO customers VALUES (1, 'Ann'), (2, 'Ann'), (3, 'Zed'); INSERT INTO orders VALUES (1, 1, 10.00), (2, 2, 20.00), (3, 2, 30.00);