Witam.
Moje doświadczenie z SQL to raptem tydzień intensywnej nauki.
Mam problem z opracowaniem pewnego zapytania ( używam PostgreSQL 8.3.5 ).
W mojej bazie ( filmoteka ) znajdują się takie oto 3 tabele:
CREATE SEQUENCE film_sekwencja START 1;
CREATE TABLE film(
IdFilmu integer PRIMARY KEY DEFAULT nextval('film_sekwencja'),
Nazwa varchar(128) NOT NULL,
DataDodania TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
IdUzytkownika integer NOT NULL, -- id usera który DODAŁ film do bazy
);
CREATE SEQUENCE uzytkownik_sekwencja START 1;
CREATE TABLE uzytkownik(
IdUzytkownik integer PRIMARY KEY DEFAULT nextval('uzytkownik_sekwencja'),
Nick varchar(24) NOT NULL,
DataDodania DATE DEFAULT CURRENT_DATE
);
CREATE SEQUENCE ocena_sekwencja START 1;
CREATE TABLE ocena(
IdOcena integer PRIMARY KEY DEFAULT nextval('ocena_sekwencja'),
Ocena integer,
IdFilmu integer NOT NULL,
IdUzytkownika integer NOT NULL -- id usera, który OCENIŁ film
);
Mam również zapytanie, które wyświetla:
nazwę, średnią ocenę i datę dodania filmu oraz nick usera, który dodał film do bazy:
SELECT f.nazwa,
round(avg(o.ocena),2) AS "Średnia ocena",
f.datadodania,
u.nick AS "Dodał"
FROM film f
JOIN uzytkownik u ON f.iduzytkownika = u.iduzytkownik
JOIN ocena o ON f.idfilmu = o.idfilmu
GROUP BY f.nazwa,
u.nick,
f.datadodania,
o.idocena
ORDER BY f.datadodania,
f.nazwa;
Chciałbym teraz do wyniku poprzedniego zapytania dołożyć kolumnę "twoja ocena", która
wyświetli jaką ocenę dany użytkownik wystawił poszczególnym filmom, lub NULL, jeżeli
użytkownik nie wystawił jeszcze oceny dla danego filmu. Oczywiście muszę wtedy dodać
WHERE o.iduzytkownika = numer_uzytkownika_ktoremu_wypiszemy_jego_oceny.
Czli coś takiego:
nazwa Średnia ocena datadodania Dodał Twoja ocena
Psy 4.50 2008-11-23 19:54:33.06122 RJM 3
Psy2 4.40 2008-11-23 19:54:33.06122 Q (NULL)
Jak mam to zrobić ?