Zapytanie SQL - prośba o pomoc

0

Dzień Dobry,
mam zadanie by zapytanie zwróciło nazwę, kategorię oraz cenę napojów, których cena jest wyższa niż średnia z cen wszystkich produktów.

piszę tak:

SELECT ProductName, CategoryID FROM Products
WHERE Price = (SELECT (Price) > AVG(Price) FROM Products);

nie wychodzi...Co robię źle?

Pozdrawiam

Paweł

1

Nie mam 100% pewności, ale to raczej powinno wyglądać tak:

SELECT ProductName, CategoryID, Price FROM Products WHERE Price > (SELECT AVG(Price) FROM Products);

choć możliwe, że da się tak:

SELECT ProductName, CategoryID,Price FROM Products WHERE Price  > AVG(Price);
2

Warunek jest źle skonstruowany.

W przypadku gdy chcesz ograniczyć wyniki na podstawie funkcji agregującej musisz użyć HAVING.
https://www.sqlpedia.pl/having-filtrowanie-grup/

0

Ogromne dziękuję

Paweł

0

Sorry, za odkop - ale mam wątpliwość, co w tym kodzie jest nie tak?
Dziękuję z góry za podpowiedź.

Select ProductName, Price from Products
Group By CategoryID = 2```
Having Price > AVG(Price);
1

Grupujesz po CategoryID, a wybierasz ProductName, Price.

Na poziomie wiersza wartości ProductName, Price mówią same przez się, ale jak rozważysz grupy takich wierszy (w ramach grupy wszystkie wiersze mają to samo CategoryID), to co niby ma być wartością ProductName, Price dla grupy? To co jest w wierszu nr 1, nr 2, .. ?

0

Dziękuję za odpowiedź.
Przeczytałem ją kilkanaście razy, jednak nie do końca jestem w stanie ją sobie zobrazować.

Zmieniłem składnie i napisałem coś takiego, jednak nie działa.

Z tabeli wybieram wiersze, które się wyświetlą.
Warunkiem wyświetlenia wierszy jest ich przynależność do CategoryID = 2 i ich cena musi być większa niż średnia wszystkich produktów..
Nie potrafię znaleźć błędu, a trochę już nad tym główkuję :)

Porzuciłem funkcję grupowania, bo chciałbym aby program zadziałał bez wykorzystania funkcji Having.

Co tutaj robię źlę?


```SELECT ProductName, Price, CategoryID
from Products
Where ( 
	SELECT CategoryID = 2 
 and Price > AVG(Price) from Products
 )
1
  1. Policz średnią z produktów:
    SELECT Avg(Price) FROM Products
    2.Wybierz rekordy z kategorii 2:
    SELECT * FROM Products WHERE CategoryID=2
    3.Dodaj do powyższego warunek, że cena jest wyższaod średniej:
    SELECT * FROM Products WHERE CategoryID=2 And Price>(SELECT Avg(Price) FROM Products)

Nie jest optymalne, ale zadziała. I łatwo wytłumaczyć.

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