Aktywne Wpisy
feenszi +7
psycha +12
Naszła mnie fala smutku, że zawsze będę sam i jestem już za stary, żeby zmienić coś w swoim życiu.
Zastanawia mnie, czy w okolicach trzydziestki i wyżej, więc wieku dorosłego, czy ludzie potrafią jeszcze zakochiwać się szczerym i czystym uczuciem, czy może to jest już taki wiek, że liczy się tylko zimny bilans zysków i strat, mniej lub bardziej uświadomiony. (Nie mam na myśli romansów, bo te na pewno mogą być bardzo
Zastanawia mnie, czy w okolicach trzydziestki i wyżej, więc wieku dorosłego, czy ludzie potrafią jeszcze zakochiwać się szczerym i czystym uczuciem, czy może to jest już taki wiek, że liczy się tylko zimny bilans zysków i strat, mniej lub bardziej uświadomiony. (Nie mam na myśli romansów, bo te na pewno mogą być bardzo
select s.sport
, r.player
, r.result
, s.units units
from plchsports s
join plchresults r
on r.sportid = s.sportid
order by s.sport, case s.bestresult when 'HIGH' then r.result
else 10 end desc,
case s.bestresult when 'LOW' then r.result
else 10 end asc;
Z nieposortowanych danych otrzymuje wyniki jak w załączniku
Czy order by tworzy sobie dla kazdego wiersza osobno kolejność sortowania np dla "HIGH" będzie to s.sport - > r.result -> 10
a dla "LOW" s.sport - > 10 -> r.result ?
Niie do końca rozumiem w jaki sposób powoduje to posortowanie danych w podanej kolejności,
Gdybym napisał w klauzuli po prostu "Order by s.sport,10" dostałbym błąd Oracla dlaczego wiec tutaj to akceptuje
#programowanie #oracle #sql #bazydanych
czyli:
wiersze z 'HIGH' sortuje po result MALEJĄCO, inaczej przyjmuje tam 10,
następnie
wiersze z 'LOW' sortuje po result ROSNĄCO, w pozostałych przyjmuje 10.
czyli najpierw high malejąco, potem 10, potem low rosnąco (?) - zakładając, że high nie będzie poniżej 10 i w low powyżej 10
Według logiki Oracla ta 10 powinna symbolizowac ze sortuje po 10 kolumnie w zapytaniu, ale zapytanie ma tylko 5 wiec normalnie zwróciłoby blad jednak gdy używam case w Order By takiego bledu nie ma.
select
....
, case s.bestresult when 'HIGH' then r.result else 10 end desc
, case s.bestresult when 'LOW' then r.result else 10 end asc;
from ...
dodatkowo, imho, ponieważ ta wartość
10
jest przyjęta arbitralnie i dla osoby czytającej kod po raz pierwszy