Funkcje analityczne SQL
Znajdź trzy zamówienia o najwyższej wartości.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
6 |
09/01/20 |
81300 |
7 |
09/01/21 |
52000 |
19 |
09/03/10 |
28400 |
select ID_ZAMOWIENIA, DATA, WARTOSC from ( select ID_ZAMOWIENIA, DATA, WARTOSC, rank() over (order by WARTOSC desc) r from zamowienia) where r <=3;
Wyświetl dane dziesiątego zamówienia w kolejności wartości.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
FIRMA |
MIASTO |
14 |
09/02/12 |
8000 |
Waga Kraków |
Kraków |
select ID_ZAMOWIENIA, DATA, WARTOSC, FIRMA, MIASTO from (
select ID_ZAMOWIENIA, DATA, WARTOSC, FIRMA, MIASTO, rank() over (order by WARTOSC desc) r from zamowienia) where r =10;
Wygeneruj ranking miast według łącznej sumy złożonych zamówień.
MIASTO |
RAZEM |
RANKING |
Kraków |
100280 |
1 |
Warszawa |
97700 |
2 |
Poznań |
73700 |
3 |
Gdańsk |
28900 |
4 |
select miasto, razem, rank () over (order by miasto) razem from (select miasto, sum(WARTOSC)as razem from zamowienia group by miasto)
Wyświetl dane firmy, która złożyła najwięcej zamówień.
FIRMA |
RAZEM_ZAMÓWIEŃ |
Wodnik sp. z o.o. |
6 |
select * from (select firma, rank () over (order by suma desc)ranking, suma
from (select FIRMA, count (firma) over (order by firma)suma from zamowienia group by firma) ) where ranking = 1
Dla każdego miasta wyświetl nazwę firmy, która złożyła zamówienia o najwyższej łącznej wartości.
MIASTO |
FIRMA |
RAZEM |
Gdańsk |
R.A.K. |
28900 |
Kraków |
Waga Kraków |
66900 |
Poznań |
Wodnik sp. z o.o. |
57700 |
Warszawa |
Koziorożec Polska |
85200 |
select miasto, firma, razem from(select miasto, firma, razem, rank () over (partition by miasto order by razem desc ) ranking from (select miasto, firma, sum(WARTOSC)as razem
from zamowienia group by miasto, firma)) where ranking = 1
W oparciu o wartości podziel złożone w Poznaniu zamówienia na trzy możliwie równoliczne grupy: zamówienia najtańsze, zamówienia średnie, zamówienia najdroższe.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
GRUPA |
9 |
09/02/05 |
2200 |
najtańsze |
15 |
09/02/16 |
5200 |
najtańsze |
1 |
09/01/11 |
5200 |
najtańsze |
4 |
09/01/16 |
7500 |
średnie |
20 |
09/03/15 |
9200 |
średnie |
3 |
09/01/14 |
16000 |
najdroższe |
19 |
09/03/10 |
28400 |
najdroższe |
SELECT id_zamowienia, data, wartosc, ntile(3) OVER (ORDER BY wartosc),
decode (ntile(3) OVER (ORDER BY wartosc),1,'najtansze',2,'srednie','najdrozsze')
FROM zamowienia WHERE miasto = 'Poznań' order by wartość
Wyświetl informacje o 10% najdroższych zamówień.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
6 |
09/01/20 |
81300 |
7 |
09/01/21 |
52000 |
SELECT id_zamowienia,data,wartość FROM ( SELECT id_zamowienia,data,wartosc, percent_rank() over (ORDER BY wartosc DESC) pr FROM zamowienia)WHERE pr <= 0.09;
Dla każdego zamówienia złożonego w Krakowie wyświetl jego dane oraz średnią wartość trzech ostatnich zamówień (wliczając bieżące).
ID_ZAMOWIENIA |
DATA |
WARTOSC |
SREDNIA_Z_3 |
7 |
09/01/21 |
52000 |
52000 |
8 |
09/02/01 |
11000 |
31500 |
10 |
09/02/06 |
3820 |
22273 |
11 |
09/02/07 |
14000 |
9607 |
14 |
09/02/12 |
8000 |
8607 |
21 |
09/03/16 |
6900 |
9633 |
22 |
09/03/20 |
4560 |
6487 |
select id_zamowienia, data, wartosc, avg(wartosc) OVER (ORDER BY data rows 2 PRECEDING) as srednia_z_3 from zamowienia where miasto = 'Kraków'
order by data, srednia_z_3 desc
Funkcje analityczne SQL
Znajdź trzy zamówienia o najwyższej wartości.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
6 |
09/01/20 |
81300 |
7 |
09/01/21 |
52000 |
19 |
09/03/10 |
28400 |
select ID_ZAMOWIENIA, DATA, WARTOSC from ( select ID_ZAMOWIENIA, DATA, WARTOSC, rank() over (order by WARTOSC desc) r from zamowienia) where r <=3;
Wyświetl dane dziesiątego zamówienia w kolejności wartości.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
FIRMA |
MIASTO |
14 |
09/02/12 |
8000 |
Waga Kraków |
Kraków |
select ID_ZAMOWIENIA, DATA, WARTOSC, FIRMA, MIASTO from (
select ID_ZAMOWIENIA, DATA, WARTOSC, FIRMA, MIASTO, rank() over (order by WARTOSC desc) r from zamowienia) where r =10;
Wygeneruj ranking miast według łącznej sumy złożonych zamówień.
MIASTO |
RAZEM |
RANKING |
Kraków |
100280 |
1 |
Warszawa |
97700 |
2 |
Poznań |
73700 |
3 |
Gdańsk |
28900 |
4 |
select miasto, razem, rank () over (order by miasto) razem from (select miasto, sum(WARTOSC)as razem from zamowienia group by miasto)
Wyświetl dane firmy, która złożyła najwięcej zamówień.
FIRMA |
RAZEM_ZAMÓWIEŃ |
Wodnik sp. z o.o. |
6 |
select * from (select firma, rank () over (order by suma desc)ranking, suma
from (select FIRMA, count (firma) over (order by firma)suma from zamowienia group by firma) ) where ranking = 1
Dla każdego miasta wyświetl nazwę firmy, która złożyła zamówienia o najwyższej łącznej wartości.
MIASTO |
FIRMA |
RAZEM |
Gdańsk |
R.A.K. |
28900 |
Kraków |
Waga Kraków |
66900 |
Poznań |
Wodnik sp. z o.o. |
57700 |
Warszawa |
Koziorożec Polska |
85200 |
select miasto, firma, razem from(select miasto, firma, razem, rank () over (partition by miasto order by razem desc ) ranking from (select miasto, firma, sum(WARTOSC)as razem
from zamowienia group by miasto, firma)) where ranking = 1
W oparciu o wartości podziel złożone w Poznaniu zamówienia na trzy możliwie równoliczne grupy: zamówienia najtańsze, zamówienia średnie, zamówienia najdroższe.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
GRUPA |
9 |
09/02/05 |
2200 |
najtańsze |
15 |
09/02/16 |
5200 |
najtańsze |
1 |
09/01/11 |
5200 |
najtańsze |
4 |
09/01/16 |
7500 |
średnie |
20 |
09/03/15 |
9200 |
średnie |
3 |
09/01/14 |
16000 |
najdroższe |
19 |
09/03/10 |
28400 |
najdroższe |
SELECT id_zamowienia, data, wartosc, ntile(3) OVER (ORDER BY wartosc),
decode (ntile(3) OVER (ORDER BY wartosc),1,'najtansze',2,'srednie','najdrozsze')
FROM zamowienia WHERE miasto = 'Poznań' order by wartość
Wyświetl informacje o 10% najdroższych zamówień.
ID_ZAMOWIENIA |
DATA |
WARTOSC |
6 |
09/01/20 |
81300 |
7 |
09/01/21 |
52000 |
SELECT id_zamowienia,data,wartość FROM ( SELECT id_zamowienia,data,wartosc, percent_rank() over (ORDER BY wartosc DESC) pr FROM zamowienia)WHERE pr <= 0.09;
Dla każdego zamówienia złożonego w Krakowie wyświetl jego dane oraz średnią wartość trzech ostatnich zamówień (wliczając bieżące).
ID_ZAMOWIENIA |
DATA |
WARTOSC |
SREDNIA_Z_3 |
7 |
09/01/21 |
52000 |
52000 |
8 |
09/02/01 |
11000 |
31500 |
10 |
09/02/06 |
3820 |
22273 |
11 |
09/02/07 |
14000 |
9607 |
14 |
09/02/12 |
8000 |
8607 |
21 |
09/03/16 |
6900 |
9633 |
22 |
09/03/20 |
4560 |
6487 |
select id_zamowienia, data, wartosc, avg(wartosc) OVER (ORDER BY data rows 2 PRECEDING) as srednia_z_3 from zamowienia where miasto = 'Kraków'
order by data, srednia_z_3 desc
3