Czy ktoś jest w stanie pomóc?
Dobra pomogę, pokaż co masz: http://sqlfiddle.com/#!9/8c6810
Próbowałem robić kilka razy, nie działa.
Pokaż co robiłeś
Czy to jest dobrze?
Albo napiszesz o zapyanie w wąku, albo, wpiszesz w sqlfiddle link w moim pierwszym poście i dasz link do niego
1 jest OK, następnych 5 robisz tak samo (też grupowanie)
Nie mam pojęcia jak zrobić następne.
Prawie dobrze, tylko warunek błędny, masz wykluczyć płyty wydane przed 2010 rokiem a bierzesz tylko e wydane do 2010-01-01 włacznie.
Powinno być tak:
SELECT id_plyty, tytul_plyty, Count(id_plyty) as 'Ilosc utworow'
From plyta INNER JOIN utwor
USING (id_plyty)
WHERE data_wydania>='2010-01-01'
GROUP BY id_plyty;
Nie wiem czy dobry link dałes, ale powinno być:
SELECT
id_plyty
, tytul_plyty
,Round(avg(ocena_utworu),2) AS `Średnia ocena utworu`
FROM plyta INNER JOIN utwor
USING (id_plyty)
WHERE
format_pliku='mp3'
GROUP BY
id_plyty
,tytul_plyty
Uwaga ode mnie wyrób sobie nawyk wypisania wszystkich kolumn w group by. Wiem, że mysql nie wymaga, ale wg. stanu mojej wiedzy tylko on, więc podczas przesiadki będzie bolało
- nie round, a avg
- avg ma tylko jeden parametr, poza tym widac, że coś się nie zgadza z nawiasami.
- NIGDY, ale to NIGDY nie używaj PLiterek w nazwach obiektów BD.
- aliasy w MySQL dajemy w ` a nie w '
Próbowałem jeszcze 7: http://sqlfiddle.com/#!9/8c6810/18
Resztę zadań liczę na pomoc.
Prawie...
SELECT E2.tytul_utworu
FROM utwor AS E1, utwor AS E2
WHERE E1.tytul_utworu='Enter Sandman'
AND E1.format_pliku = E2.format_pliku;
reszta jak już, to nie dziś :)
No to kilka wskazówek:
ad. 3
analogicznie jak 2 tylko robisz count i w where warunek na długos utworu.
ad. 4
łaczenie tabel wydawca i plyta, 2 funkcje agregujace count i avg
ad.5
łaczenie tabel wydawca, plyta, funkcje agregujące SUM, warunek WHERE wykluczający pudełka
ad.6 i 9
to zostawimy na koniec
Zrobi ktoś?
7 zrobione, pozostałych nie umiem.
Na szybko pisane ale wydaje się być poprawne.
1
SELECT
p.tytul_plyty
,p.data_wydania
,COUNT(u.id_utworu)
FROM plyta as p
LEFT JOIN utwor as u ON p.id_plyty=u.id_plyty
GROUP BY
p.tytul_plyty
HAVING YEAR(p.data_wydania) < 2010
2
SELECT
p.tytul_plyty
,u.tytul_utworu
,AVG(u.ocena_utworu) as srednia_ocena
FROM plyta as p
LEFT JOIN utwor as u ON p.id_plyty=u.id_plyty
WHERE u.format_pliku = 'MP3'
GROUP BY
p.tytul_plyty
,u.tytul_utworu
3
SELECT
p.tytul_plyty
,u.tytul_utworu
,u.czas_trwania
FROM plyta as p
LEFT JOIN utwor as u ON p.id_plyty=u.id_plyty
GROUP BY
p.tytul_plyty
,u.tytul_utworu
,u.czas_trwania
HAVING u.czas_trwania >= '04:00:00'
4
SELECT
w.nazwa_wydawcy
,COUNT(p.id_plyty) as ilosc_plyt
,AVG(p.ocena_plyty) as srednia_ocena
FROM wydawca as w
LEFT JOIN plyta as p ON w.id_wydawcy=p.id_wydawcy
GROUP BY
w.nazwa_wydawcy
5
SELECT
w.nazwa_wydawcy
,p.rodzaj_muzyki
,ROUND(SUM(p.cena),2) as cena_laczna
FROM wydawca as w
LEFT JOIN plyta as p ON w.id_wydawcy=p.id_wydawcy
WHERE p.rodzaj_opakowania != 'Pudełko'
GROUP BY
w.nazwa_wydawcy
,p.rodzaj_muzyki
6
SELECT
w.nazwa_wydawcy
,p.rodzaj_nosnika
,MAX(p.cena) as cena_max
,MIN(p.cena) as cena_min
FROM wydawca as w
LEFT JOIN plyta as p ON w.id_wydawcy=p.id_wydawcy
GROUP BY
w.nazwa_wydawcy
,p.rodzaj_nosnika
8
SELECT
u.tytul_utworu
,u.czas_trwania
,u.rozmiar_pliku, p.tytul_plyty
FROM utwor as u
LEFT JOIN plyta as p ON u.id_plyty=p.id_plyty
WHERE u.czas_trwania > (
SELECT czas_trwania
FROM utwor
WHERE tytul_utworu = 'Fences')
OR
u.rozmiar_pliku > (
SELECT rozmiar_pliku
FROM utwor
WHERE tytul_utworu = 'Fences')
9
SELECT
p.tytul_plyty
,w.nazwa_wydawcy
,p.ile_sztuk
FROM plyta as p
LEFT JOIN wydawca as w ON p.id_wydawcy=w.id_wydawcy
WHERE p.ile_sztuk > (
SELECT ile_sztuk
FROM plyta
WHERE tytul_plyty = 'Rosana')
@bartekx98, gdybyś mnie zapytał, to ci powiem, że rozwiązania Ogrodnik są:
1 -złe
2 - złe
3 - złe
4 - złe
5 - dobre
6- złe
8 i 9 - OMG :)
Ale 8 i 9 powinienś umieć rozwiązać - tak samo jak 7. A wszystkie wcześnieijsze są łatwiejsze (no może za wyjątkiem 6)
Marcin.Miga bardzo chętnie dowiedziałbym się jakie konkretnie błędy są w tych zapytaniach. Człowiek uczy się całe życie.
@Ogrodnik, @bartekx98 proszę bardzo: http://sqlfiddle.com/#!9/8c6810/141
@Marcin.Miga faktycznie w kilku zapytaniach inaczej zinterpretowałem jaka ma być odpowiedź - po prostu jej nie zrozumiałem :) nie ma co wnikać.
Z tego co widzę kilka wyników jest takich samych - kwestia różnych konstrukcji/warunków SELECT jak i wyświetlania wyników (dodatkowe kolumny w celu sprawdzenia poprawności). http://sqlfiddle.com/#!9/8c6810/155
Dobrze jest czasami spojrzeć jak inaczej można podejść do tematu. Dziękuję.
@Ogrodnik, wykazałem Twoje błędy. To że MySQL zwraca wyniki (jakieś, co do ich jakości nie będę się wypowiadał), to nie znaczy, że zapytanie jest poprawne.
Przykład: HAVING służy do odsiania pogrupowanych wartości.
Przerobiłem skrypt na postgresql i wkleiłem tylko pierwsze zapytania...
Musisz mi wierzyć, że TO_CHAR(data, 'yyyy') to prawie to samo co YEAR(data). Zwraca text zamiast int.
http://sqlfiddle.com/#!17/21d2a/2
Moje się wykonało, Twoje nie.
@Marcin.Miga najważniejsze, że wiem jakie to błędy.