-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlab05.sql
154 lines (119 loc) · 6.16 KB
/
lab05.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
--5.1. Napisz zapytanie w języku SQL wyświetlające informacje na temat:
--1. łącznej liczby czekoladek w bazie danych
SELECT count(idczekoladki) FROM czekoladki;
--2. łącznej liczby czekoladek z nadzieniem (na 2 sposoby)
-- podpowiedź: count(*), count(nazwaKolumny)
SELECT count(*) FROM czekoladki WHERE nadzienie IS NOT NULL;
SELECT count(idczekoladki) FROM czekoladki WHERE nadzienie IS NOT NULL;
--3. pudełka, w którym jest najwięcej czekoladek (uwaga: konieczne jest użycie LIMIT)
SELECT idpudelka, sum(sztuk) FROM zawartosc
GROUP BY idpudelka ORDER BY 2 DESC LIMIT 1;
--4. ★ łącznej liczby czekoladek w poszczególnych pudełkach
SELECT idpudelka, sum(sztuk) FROM zawartosc GROUP BY idpudelka;
--5. ★ łącznej liczby czekoladek bez orzechów w poszczególnych pudełkach
SELECT idpudelka, sum(sztuk) FROM zawartosc NATURAL JOIN czekoladki
WHERE orzechy IS NULL GROUP BY idpudelka;
--6. ★ łącznej liczby czekoladek w mlecznej czekoladzie w poszczególnych pudełkach
SELECT idpudelka, sum(sztuk) FROM zawartosc NATURAL JOIN czekoladki
WHERE czekolada='mleczna' GROUP BY idpudelka;
--5.2. Napisz zapytanie w języku SQL wyświetlające informacje na temat:
--1. masy poszczególnych pudełek
SELECT idpudelka, sum(sztuk * masa) FROM zawartosc NATURAL JOIN czekoladki
GROUP BY idpudelka;
--2. pudełka o największej masie
SELECT idpudelka, sum(sztuk * masa) FROM zawartosc NATURAL JOIN czekoladki
GROUP BY idpudelka ORDER BY 2 DESC LIMIT 1;
--3. ★ średniej masy pudełka w ofercie cukierni
SELECT avg(pudelka.masa) AS "srednia masa pudelka"
FROM (
SELECT sum(sztuk * masa) AS masa FROM zawartosc NATURAL JOIN czekoladki
GROUP BY idpudelka
) AS pudelka;
--4. ★ średniej wagi pojedynczej czekoladki w poszczególnych pudełkach
SELECT idpudelka, sum(sztuk * masa) / sum(sztuk) AS "srednia masa czekoladki"
FROM zawartosc NATURAL JOIN czekoladki GROUP BY idpudelka;
--5.3. Napisz zapytanie w języku SQL wyświetlające informacje na temat:
--1. liczby zamówień na poszczególne dni
SELECT datarealizacji, count(idzamowienia) FROM zamowienia
GROUP BY datarealizacji ORDER BY 1;
--2. łącznej liczby wszystkich zamówień
SELECT count(idzamowienia) FROM zamowienia;
--3. ★ łącznej wartości wszystkich zamówień
SELECT sum(sztuk * cena) FROM artykuly NATURAL JOIN pudelka;
--4. ★ klientów, liczby złożonych przez nich zamówień
--i łącznej wartości złożonych przez nich zamówień
SELECT klienci.nazwa, count(idzamowienia), sum(sztuk * cena)
FROM klienci NATURAL JOIN zamowienia NATURAL JOIN artykuly JOIN pudelka USING(idpudelka)
GROUP BY idklienta;
--5.4. Napisz zapytanie w języku SQL wyświetlające informacje na temat:
--1. czekoladki, która występuje w największej liczbie pudełek
SELECT idczekoladki, count(idczekoladki) FROM zawartosc
GROUP BY idczekoladki ORDER BY 2 DESC;
--2. pudełka, które zawiera najwięcej czekoladek bez orzechów
SELECT idpudelka, sum(sztuk) FROM zawartosc NATURAL JOIN czekoladki
WHERE orzechy IS NULL GROUP BY idpudelka ORDER BY 2 DESC;
--3. ★ czekoladki, która występuje w najmniejszej liczbie pudełek
SELECT idczekoladki, count(idpudelka)
FROM czekoladki LEFT OUTER JOIN zawartosc USING(idczekoladki)
GROUP BY idczekoladki ORDER BY 2;
--4. ★ pudełka, które jest najczęściej zamawiane przez klientów
SELECT idpudelka, count(idpudelka) FROM artykuly
GROUP BY idpudelka ORDER BY 2 DESC;
--5.5. Napisz zapytanie w języku SQL wyświetlające informacje na temat:
--1. liczby zamówień na poszczególne kwartały
SELECT extract(quarter FROM datarealizacji) AS kwartal, count(*)
FROM zamowienia GROUP BY extract(quarter FROM datarealizacji);
--2. liczby zamówień na poszczególne miesiące
SELECT extract(month FROM datarealizacji) AS miesiac, count(*)
FROM zamowienia GROUP BY extract(month FROM datarealizacji) ORDER BY 1;
--3. ★ liczby zamówień do realizacji w poszczególnych tygodniach
SELECT extract(week FROM datarealizacji) AS tydzien, count(*)
FROM zamowienia GROUP BY extract(week FROM datarealizacji) ORDER BY 1;
--4. ★ liczby zamówień do realizacji w poszczególnych miejscowościach
SELECT miejscowosc, count(idzamowienia)
FROM zamowienia NATURAL JOIN klienci GROUP BY miejscowosc ORDER BY 2 DESC;
--5.6. Napisz zapytanie w języku SQL wyświetlające informacje na temat:
--1. łącznej masy wszystkich pudełek znajdujących się w cukierni
WITH masy_pudelek AS
(
SELECT idpudelka, sum(sztuk * masa) AS masa_pudelka
FROM zawartosc NATURAL JOIN czekoladki GROUP BY idpudelka
)
SELECT sum(stan * masa_pudelka)
FROM masy_pudelek NATURAL JOIN pudelka;
--2. ★ łącznej wartości wszystkich pudełek znajdujących się w cukierni
SELECT sum(stan * cena) FROM pudelka;
--5.7. Zakładając, że koszt wytworzenia pudełka czekoladek jest równy kosztowi
--wytworzenia zawartych w nim czekoladek, napisz zapytanie wyznaczające:
--1. zysk ze sprzedaży jednej sztuki poszczególnych pudełek
--(różnica między ceną pudełka i kosztem jego wytworzenia),
WITH koszty_pudelek AS
(
SELECT idpudelka, sum(sztuk * koszt) AS koszt_pudelka
FROM zawartosc NATURAL JOIN czekoladki GROUP BY idpudelka
)
SELECT idpudelka, cena - koszt_pudelka AS zysk_z_pudelka
FROM pudelka NATURAL JOIN koszty_pudelek;
--2. zysk ze sprzedaży zamówionych pudełek
WITH koszty_wytworzenia AS (
SELECT idpudelka, sum(sztuk * koszt) AS koszt
FROM zawartosc NATURAL JOIN czekoladki GROUP BY idpudelka
), zyski_ze_sprzedazy AS (
SELECT idpudelka, cena - koszt AS zysk
FROM pudelka NATURAL JOIN koszty_wytworzenia
)
SELECT sum(sztuk * zysk)
FROM artykuly NATURAL JOIN zyski_ze_sprzedazy;
--3. ★ zysk ze sprzedaży wszystkich pudełek czekoladek w cukierni
WITH koszty_wytworzenia AS (
SELECT idpudelka, sum(sztuk * koszt) AS koszt
FROM zawartosc NATURAL JOIN czekoladki GROUP BY idpudelka
), zyski_ze_sprzedazy AS (
SELECT idpudelka, cena - koszt AS zysk
FROM pudelka NATURAL JOIN koszty_wytworzenia
)
SELECT sum(zysk * stan)
FROM pudelka NATURAL JOIN zyski_ze_sprzedazy;
--5.8. Napisz zapytanie wyświetlające: liczbę porządkową i identyfikator pudełka czekoladek
--(idpudelka). Identyfikatory pudełek mają być posortowane alfabetycznie, rosnąco.
--Liczba porządkowa jest z przedziału 1..N, gdzie N jest ilością pudełek.