Stundas uzdevums: Apvienot datus no vairākām tabulām, izmantojot JOIN un agregētas funkcijas.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
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;
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 10.4 JOIN un sarežģīti vaicājumi; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
-- 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;
queries.sql failā vai datubāzes klienta vaicājuma logā.Pievieno šīs stundas datu paņēmienu kā nelielu, strādājošu projekta daļu.
speletaji, rezultati vai ielade_topu().Pārbaudi, vai datu algoritms darbojas paredzami.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu datu uzlabojumu.
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;