Napisanie instrukcji sql

0

Na dzis ostatnia tabela,prosiłym o zerkniecie czy jest małowiele ok..
tabele:
plyty(idplyty,tytul,cenajedn,rokwydania,ilosc)
sprzedaz(numerklienta,idplyty,iloscsprzedanych,datasp)
Klucz głowny(atrybuty podkreslone) klucz obcy: idplyty

Zapytanie w sql ktore dla kazdego klienta podaje numerklienta, ilosc plyt wydanych w roku 2010 jakie zakupil

SELECT a.numerklienta, SUM(a.iloscsprzedanych)
FROM sprzedaz a JOIN plyty b ON a.idplyty=b.idplyty
WHERE b.rokwydania='2010'

Instrukcja w sql ktora dla kazdej plyty ktora nie zostala jeszcze sprzedana podaje idplyty, rok wydania,cenajedn

SELECT a.idplyty, a.rokwydania, a.cenajedn
FROM plyty a LEFT JOIN sprzedaz b ON a.idplyty = b.idplyty
WHERE b.idplyty IS NULL AND a.idplyty IS NOT NULL;

instrukcja ktora dla kazdej plyty oblicza liczbe sprzedanych egzemplarzy i podaje minimalna wartosc sposrod tych liczb

SELECT * FROM(
SELECT sp.idplyty, SUM(sp.iloscsprzedanych)
FROM sprzedaz sp WHERE sp.idplyty=sp.idplyty GROUP BY sp.idplyty ORDER BY SUM(sp.iloscsprzedanych) )
WHERE ROWNUM=1;
1

1 ok
2. AND a.idplyty IS NOT NULL jest niepotrzebne
3. źle, nie zwróci Ci płyt bez sprzedaży

0

Hmm wiesz moze jak to poprawic ?

0
SELECT * FROM (
SELECT a.idplyty, SUM(coalesce(b.iloscsprzedanych,0)) il
FROM plyta  a LEFTJOIN sprzedaz b ON a.idplyty=b.idplyty order by il)
WHERE ROWNUM=1;
0

Czy moglbym to tez tak napisac?
Instrukcja w sql ktora dla kazdej plyty ktora nie zostala jeszcze sprzedana podaje idplyty, rok wydania,cenajedn


Select idplyty,rokwydania,cenajedn from plyty
where numerklienta not in (Select numer klienta from sprzedaz);
1
dcielak napisał(a):

Czy moglbym to tez tak napisac?
Instrukcja w sql ktora dla kazdej plyty ktora nie zostala jeszcze sprzedana podaje idplyty, rok wydania,cenajedn


Select idplyty,rokwydania,cenajedn from plyty
where numerklienta not in (Select numer klienta from sprzedaz);

Blisko, ale użyłeś złej kolumny. Jeśli struktura bazy Ci się nie zmieniła, to w tabeli plyty nie masz takiej kolumny jak numerklienta. Możesz to rozwiązać na 2 sposoby:

-- sposob 1
SELECT idplyty, rok wydania, cenajedn
  FROM plyty p
 WHERE p.idplyty NOT IN (SELECT s.idplyty FROM sprzedaz s)
--sposob 2
SELECT idplyty, rok wydania, cenajedn
  FROM plyty p
  LEFT JOIN sprzedaz s 
    ON s.idplyty = s.idplyty
 WHERE s.idplyty IS NULL	

1 użytkowników online, w tym zalogowanych: 0, gości: 1