Northwind 21. Wyświetl zamówienia których wartość jest większa niż 100 dol.

0

Witam serdecznie wszystkich, to moje pierwsze kroki, więc proszę o wyrozumiałość.
Uczę się SQL od dokładnie 7 dni poświęcając codziennie 1h. Czy zadanie:
http://anonco.pl/sql-northwind-tutorial-examples-e2-select-from-where-year-month-sum-join-groupby-orderby-having/
nie powinno wyglądać tak:

Select distinct
year(O.OrderDate) as Rok,
MONTH(O.OrderDate) as Miesiąc,
OD.OrderID as "Numer zamówienia",
SUM(OD.UnitPrice*OD.quantity) as "zamówienia powyżej 100 dolców"

FROM
[Order Details] as OD join orders as O on O.OrderID=OD.OrderID

Group by
year(O.OrderDate),
month(O.OrderDate),
OD.OrderID
having
SUM(OD.UnitPrice*OD.quantity)>'100'
Order by
1 desc, 2 desc

Unit price to cena jednostkowa produktu, nie ma się to nijak do wartości zamówienia, ale może czegoś nie rozumiem. Z góry dziękuję za pomoc.
Pozdrawiam,
Marcin

0
Thinkmore napisał(a):

Witam serdecznie wszystkich, to moje pierwsze kroki, więc proszę o wyrozumiałość.
Uczę się SQL od dokładnie 7 dni poświęcając codziennie 1h. Czy zadanie:
http://anonco.pl/sql-northwind-tutorial-examples-e2-select-from-where-year-month-sum-join-groupby-orderby-having/
nie powinno wyglądać tak:
Select distinct

Nie, nie powinno.
Co prawda słusznie zauważyłeś ewidentnego babola i należy pomnożyć UnitPrice przez Quantity, no ale łącznie w jednym zapytaniu distinct z group by nie ma sensu w tym przypadku (i nie przychodzi mi do głowy przypadek, kiedy ma to sens - no ale zastanawiałem się całe 5s ;-))

Jasne, to zadziała i nawet zwróci poprawny wynik, ale tak się nie robi, ponieważ to zdecydowanie nadmiarowe.
Zresztą, każdy kto SQL zna od razu wzdrygnie się na widok takiego zapytania, to taki WTF.

Poza tym, jak w tym "kursie" są treści podobnej jakości, to może lepiej zapomnij o nim.
Nauczysz się jakiś głupot i błędnych nawyków.

0

Ten distinct pierwszy raz się pojawił w tym tutku - szczerze to przepisałem to bez namysłu, ale widziałem, że bez tego też działa:) Z tego co zauważyłem to używając tego distincta wyrzuca wartości różne, które się nie powtarzają i o to chyba chodzi w tym?

1
Thinkmore napisał(a):

Z tego co zauważyłem to używając tego distincta wyrzuca wartości różne, które się nie powtarzają i o to chyba chodzi w tym?

Tak, o to chodzi w distinct.
Ale zastanów się - czy po przejściu grupowania mogą być dwa identyczne wiersze w wynikach tego zapytania?
To po co tam distinct?

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