4 technikum bazy danych - cwiczenia MySQL | Czy ktoś jest w stanie pomoc?

0

Czy ktoś jest w stanie pomóc?

1

Dobra pomogę, pokaż co masz: http://sqlfiddle.com/#!9/8c6810

0

Próbowałem robić kilka razy, nie działa.

0

Pokaż co robiłeś

0

Czy to jest dobrze?

0

Albo napiszesz o zapyanie w wąku, albo, wpiszesz w sqlfiddle link w moim pierwszym poście i dasz link do niego

0

1 jest OK, następnych 5 robisz tak samo (też grupowanie)

0

Nie mam pojęcia jak zrobić następne.

1

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;
0

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

0
  1. nie round, a avg
  2. avg ma tylko jeden parametr, poza tym widac, że coś się nie zgadza z nawiasami.
  3. NIGDY, ale to NIGDY nie używaj PLiterek w nazwach obiektów BD.
  4. aliasy w MySQL dajemy w ` a nie w '
0

Próbowałem jeszcze 7: http://sqlfiddle.com/#!9/8c6810/18
Resztę zadań liczę na pomoc.

1

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ś :)

0

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

0

Zrobi ktoś?

0

7 zrobione, pozostałych nie umiem.

0

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')
0

@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)

1

Marcin.Miga bardzo chętnie dowiedziałbym się jakie konkretnie błędy są w tych zapytaniach. Człowiek uczy się całe życie.

1

@Ogrodnik, @bartekx98 proszę bardzo: http://sqlfiddle.com/#!9/8c6810/141

0

@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ę.

0

@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.

0

@Marcin.Miga najważniejsze, że wiem jakie to błędy.

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