Bardzo proszę o sprawdzenie i ewentualne korekty. Będę bardzo wdzięczna.
2 tabelki:
Producent(REGON,nazwa,adres)
Produkt(kod,REGON,rodzaj,nazwa,moc,cena)
Napisz polecenie SQL, które zwróci rodzaj produktu oraz nazwe producenta, nazwe produktu, dla którego iloczyn mocy
i ceny jest mniejsza od 1/2 sredniej wartosci tego iloczynu dla danego rodzaju produktu
SELECT produkt.rodzaj, producent.nazwa, produkt.nazwa,(AVG(produkt.moc/produkt.cena))/2 as iloczyn
FROM Produkt JOIN Producent ON (Produkt.REGON=Producent.REGON)
GROUP BY produkt.nazwa
HAVING AVG(produkt.moc/produkt.cena)>= ALL
(SELECT (produkt.moc/produkt.cena)
FROM Produkt
GROUP BY produkt.nazwa )
Problem z SQL
-
- Użytkownik
- Posty: 273
- Rejestracja: 18 paź 2007, o 21:35
- Płeć: Kobieta
- Lokalizacja: Wrocław
- Podziękował: 22 razy
-
- Użytkownik
- Posty: 32
- Rejestracja: 26 lis 2009, o 01:15
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Pomógł: 9 razy
Problem z SQL
Witam, niestety Twój kod z tego co mi się wydaje, jest całkowicie błędny - chyba, że źle zrozumiałem polecenie. Napisałem Tobie, jak mi się wydaję, że to powinno wyglądać:
Nie rozumiem, dlaczego u siebie w kodzie próbujesz grupować nazwy produktów - w poleceniu tego nie ma, więc tego nie wpisałem. I jeszcze jedno, co mnie zastanawia: w poleceniu piszesz "iloczyn", ale u siebie w kodzie, cały czas obliczasz stosunek mocy do ceny (iloraz) - które jest prawidłowe? Jeśli ma być iloraz to myślę, że bez problemu znajdziesz dwa miejsca u mnie w kodzie, gdzie musisz zmienić * na /, jeśli iloczyn to nie musisz już nic zmieniać u mnie - wszystko jest dobrze. Mam nadzieję, że pomogłem. Jeśli masz jakieś pytania do mojego kodu to pytaj śmiało.
pozdrawiam
Kod: Zaznacz cały
SELECT a.nazwa AS NAZWA_PRODUKTU,
a.rodzaj AS RODZAJ_PRODUKTU,
p.nazwa AS NAZWA_PRODUCENTA, a.iloczyn AS ILOCZYN
FROM
(SELECT p.regon AS regon, p.nazwa AS nazwa, p.rodzaj AS rodzaj, p.moc*p.cena AS iloczyn FROM Produkt p) a,
(SELECT p.rodzaj AS rodzaj, avg(p.moc*p.cena) AS iloczyn FROM Produkt p GROUP BY p.rodzaj) b,
Producent p
WHERE a.rodzaj = b.rodzaj
AND a.iloczyn <= b.iloczyn/2
AND p.regon = a.regon
pozdrawiam
-
- Użytkownik
- Posty: 273
- Rejestracja: 18 paź 2007, o 21:35
- Płeć: Kobieta
- Lokalizacja: Wrocław
- Podziękował: 22 razy
Problem z SQL
Dziękuję za pomoc, jednak ja nie rozumiem składni. My na zajęciach nie używaliśmy komendy AS, ani po FROM nie używaliśmy SELECT. Czy można to zapisać inaczej?
-
- Użytkownik
- Posty: 32
- Rejestracja: 26 lis 2009, o 01:15
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Pomógł: 9 razy
Problem z SQL
SQL ma to do siebie, że na ogół istnieje więcej możliwości uzyskania tego samego wyniku (choć wtedy, mimo takiego samego wyniku, jedne rozwiązania mogą działać szybciej, inne wolniej).
Napisałem inne rozwiązanie, może bardziej się Tobie spodoba:
AS używam tutaj tylko po to, żeby nazwy kolumn były na koniec ładniejsze. To bardzo podstawowy operator. SELECTy "wewnątrz" kodu, czyli tzw. "subquery" też są bardzo podstawową i ułatwiającą życie sprawą. Polecam zapoznać się - napewno się przyda.
pozdrawiam
Napisałem inne rozwiązanie, może bardziej się Tobie spodoba:
Kod: Zaznacz cały
SELECT a.nazwa AS NAZWA_PRODUKTU,
a.rodzaj AS RODZAJ_PRODUKTU,
p.nazwa AS NAZWA_PRODUCENTA, a.moc*a.cena AS ILOCZYN
FROM Produkt a, Producent p
WHERE a.moc*a.cena <= (SELECT AVG(x.moc*x.cena)/2 FROM Produkt x WHERE a.rodzaj = x.rodzaj GROUP BY x.rodzaj)
AND p.regon = a.regon
pozdrawiam
-
- Użytkownik
- Posty: 273
- Rejestracja: 18 paź 2007, o 21:35
- Płeć: Kobieta
- Lokalizacja: Wrocław
- Podziękował: 22 razy