Tavs šīs stundas izaicinājums: Apvienot datus no vairākām tabulām, izmantojot JOIN un agregētas funkcijas.
JOIN apvieno rindas no divām vai vairākām tabulām, balstoties uz attiecībām (parasti FK ↔ PK).
-- INNER JOIN — tikai tās rindas, kurām ir atbilstība abās tabulās
SELECT s.vards, sp.punkti, sp.spelets
FROM speletaji s
INNER JOIN speles sp ON s.id = sp.speletajs_id
ORDER BY sp.spelets DESC;
-- LEFT JOIN — visi spēlētāji, ieskaitot tos bez spēlēm
SELECT s.vards, COUNT(sp.id) AS speles_skaits
FROM speletaji s
LEFT JOIN speles sp ON s.id = sp.speletajs_id
GROUP BY s.vards;
-- Apvienots: TOP 5 spēlētāju kopējie punkti
SELECT s.vards, SUM(sp.punkti) AS kopa
FROM speletaji s
INNER JOIN speles sp ON s.id = sp.speletajs_id
GROUP BY s.vards
ORDER BY kopa DESC
LIMIT 5;
Saraksts ar visām spēlēm un to spēlētāju vārdiem.
SELECT s.vards, sp.punkti, sp.spelets FROM speletaji s INNER JOIN speles sp ON s.id = sp.speletajs_id;WHERE sp.spelets >= NOW() - INTERVAL '1 month'.Atrod, cik spēļu ir nospēlējis katrs spēlētājs (arī 0 spēles).
SELECT s.vards, COUNT(sp.id) AS skaits FROM speletaji s LEFT JOIN speles sp ON s.id = sp.speletajs_id GROUP BY s.vards;Izveido reālu "leaderboard" vaicājumu.
SELECT s.vards, SUM(sp.punkti) AS kopa FROM speletaji s INNER JOIN speles sp ON s.id = sp.speletajs_id GROUP BY s.vards ORDER BY kopa DESC LIMIT 5;AVG(sp.punkti) AS videjie.MAX(sp.punkti) AS rekords.CREATE VIEW leaderboard AS <tavs vaicājums>;SELECT * FROM leaderboard;Izmēģini ligzdotos vaicājumus.
SELECT vards FROM (SELECT s.vards, AVG(sp.punkti) AS v FROM speletaji s JOIN speles sp ON s.id=sp.speletajs_id GROUP BY s.vards) t WHERE t.v > (SELECT AVG(punkti) FROM speles);ON.WHERE x = NULL nav pareizi — lieto WHERE x IS NULL.-- TOP 5 spēlētāji ar pilnu statistiku
SELECT
s.vards,
COUNT(sp.id) AS speles_skaits,
SUM(sp.punkti) AS kopa,
AVG(sp.punkti)::INT AS videjie,
MAX(sp.punkti) AS rekords
FROM speletaji s
INNER JOIN speles sp ON s.id = sp.speletajs_id
GROUP BY s.vards
ORDER BY kopa DESC
LIMIT 5;