idatt2103_databaser/prev_exams/ex18/oppg2.sql

45 lines
1.5 KiB
SQL

-- Oppgave 2 a (forslag 1)
SELECT DISTINCT STED.stedsnavn FROM ETAPPE
LEFT JOIN STED ON STED.sted_id = ETAPPE.til_stedid OR STED.sted_id = ETAPPE.fra_stedid
LEFT JOIN LØP_ETAPPE ON LØP_ETAPPE.enr = ETAPPE.enr
LEFT JOIN LØP ON LØP.lnr = LØP_ETAPPE.lnr
WHERE LØP.lnr = 1 AND LØP.aar = 2018
ORDER BY STED.stedsnavn;
-- Oppgave 2 a (forslag 2)
SELECT DISTINCT S.stedsnavn
FROM STED S, ETAPPE E, LØP_ETAPPE LE, LØP L
WHERE S.sted_id = E.til_stedid OR S.sted_id = E.fra_stedid
AND E.enr = LE.enr
AND LE.lnr = L.lnr
AND L.lnr = 1 AND LE.aar = 2018
ORDER BY S.stedsnavn;
-- Oppgave 2 b
SELECT e.distanse, s_f.stedsnavn AS fra, s_t.stedsnavn AS til FROM ETAPPE e
LEFT JOIN STED s_t ON s_t.sted_id = e.til_stedid
LEFT JOIN STED s_f ON s_f.sted_id = e.fra_stedid
LEFT JOIN LØP_ETAPPE le ON le.enr = e.enr
LEFT JOIN LØP l ON l.lnr = le.lnr
WHERE l.lnr = 1 AND l.aar = 2018
ORDER BY le.løpenr;
-- Oppgave 2 c
SELECT DISTINCT d.deltnr, d.navn FROM DELTAKER d
WHERE d.deltnr IN
(SELECT d.deltnr, COUNT(*) AS antall FROM DELTAKER d
LEFT JOIN TIDTAKING t ON t.deltnr = d.deltnr
WHERE t.lnr = 1 AND t.aar = 2018 AND t.fullført = 1
GROUP BY d.deltnr
HAVING antall = 4);
-- Oppgave 2 d
CREATE VIEW finnmark_deltaker AS
SELECT d.deltnr, COUNT(e.enr) AS etapper, SUM(t.tid) AS tot_tid FROM DELTAKER d
LEFT JOIN TIDTAKING t ON t.deltnr = d.deltnr
LEFT JOIN LØP l ON l.lnr = t.lnr
LEFT JOIN LØP_ETAPPE le ON le.lnr = l.lnr
LEFT JOIN ETAPPE e ON e.enr = le.enr
WHERE l.løpsnavn = "Finnmarksløpet" AND l.aar = 2018 AND t.fullført = 1
GROUP BY d.delntr;