Operator IN przydaje się, jak nie szukamy jednego
konkretnego rekordu, ale wielu, których pewna wartość jest w zbiorze. Na
przykład: znajdź wszystkie produkty w sklepie, które są marki, sony lub iphone.
Select * from produkty where
marka in ('sony' , 'iphone') ;
Właśnie dlatego, że więcej niż jednego producenta, to trzeba
użyć operatora IN i w nawiasach podać listę wartości. Na bazie ORACLE lista
może być, jak to powiedzieć: dwupolowa, a nawet więcej polowa. Gdybyśmy chcieli
znaleźć najdroższe produkty wyżej wymienionych marek, to można to uzyskać w
następujący sposób.
Select * from produkty
where (marka, cena)
in
(select marka, max(cena)
from produkty
where marka in ('sony' , 'iphone') group by marka ) ;
Ten drugi patent nie zadziała na MS SQL Serwerze. To zatem
jak? Pokazuję na przykładzie tabeli z cenami mieszkań, w latach, kwartałach,
miastach, dane z: https://www.nbp.pl/publikacje/rynek_nieruchomosci/ceny_mieszkan.xls
I chcę wydobyć dane o mieście, roku, kwartale dla każdego maksa
w danym roku.
W tej lokalizacji jest plik do załadowania danych oraz plik
z rozwiązaniem ww. problemu.
Brak komentarzy:
Prześlij komentarz