Навчання / Бази даних / Демо SQL

Тут показано взаємозв'язок між таблицями "users", "goods" і "deals".

таблиця "users"

idnamebirthday
1Олексій2000-05-20
2Яна2001-07-21
3Тарас2003-06-22
4Килина2004-08-23
5Панас1980-12-24
6Віра1998-03-25
7Микола2004-09-26
8Сніжана2001-01-27

таблиця "goods"

idtitlecostweight
1Велосипед1200012
2Самокат1400012.5
3Ноутбук190002.4
4Телефон95000.7
5Лампа350.2
6Ручка70.04
7Скотч480.25
8Блокнот250.3

таблиця "deals"

iduser_idgood_idpricequantitywhen_bought
1279622020-12-08
2813600032022-12-09
37510532022-10-11
4385022022-10-18
5611200012023-01-28
654950012022-05-09
7833800022022-07-29
8257022020-08-31
9642850032018-05-20
10261422019-03-15
11135700032021-06-29
126714432018-09-08
13157022023-06-03
1426712019-08-15
15633800022020-05-01
16212400022022-09-27
17722800022022-05-12
18413600032020-06-22
19624200032020-04-04
20862132021-09-17
Нижче йдуть приклади запитів до таблиць "users", "goods" і "deals".

5 останніх угод.

SELECT * FROM deals ORDER BY when_bought DESC LIMIT 5

iduser_idgood_idpricequantitywhen_bought
13157022023-06-03
5611200012023-01-28
2813600032022-12-09
4385022022-10-18
37510532022-10-11

5 останніх угод з виведенням імен юзерів та назв товарів замість ідентифікаторів.

SELECT deals.id, users.name AS user_name, goods.title AS good_title, deals.price, deals.quantity, deals.when_bought FROM deals
INNER JOIN users ON users.id=deals.user_id
INNER JOIN goods ON goods.id=deals.good_id
ORDER BY deals.when_bought DESC LIMIT 5

iduser_namegood_titlepricequantitywhen_bought
13ОлексійЛампа7022023-06-03
5ВіраВелосипед1200012023-01-28
2СніжанаВелосипед3600032022-12-09
4ТарасБлокнот5022022-10-18
3МиколаЛампа10532022-10-11

3 найдорожчі угоди з виведенням імен юзерів та назв товарів замість ідентифікаторів.

SELECT deals.id, users.name AS user_name, goods.title AS good_title, deals.price, deals.quantity, deals.when_bought FROM deals
INNER JOIN users ON users.id=deals.user_id
INNER JOIN goods ON goods.id=deals.good_id
ORDER BY deals.price DESC LIMIT 3

iduser_namegood_titlepricequantitywhen_bought
11ОлексійНоутбук5700032021-06-29
19ВіраСамокат4200032020-04-04
7СніжанаНоутбук3800022022-07-29

Вивести імена покупців та кількість їхніх угод, згрупувавши за покупцями і відсортувавши за кількістю угод.

SELECT users.name AS user_name, COUNT(deals.good_id) as deals_quantity FROM deals
INNER JOIN users ON users.id=deals.user_id
GROUP BY user_id
ORDER BY deals_quantity DESC

user_namedeals_quantity
Яна5
Віра5
Сніжана3
Микола2
Олексій2
Тарас1
Панас1
Килина1

Вивести імена покупців та суми сплачених ними грошей, згрупувавши за покупцями і відсортувавши за сумою сплачених грошей.

SELECT users.name AS user_name, SUM(deals.price) as deal_price FROM deals
INNER JOIN users ON users.id=deals.user_id
GROUP BY user_id
ORDER BY deal_price DESC

user_namedeal_price
Віра120644
Сніжана74021
Олексій57070
Килина36000
Микола28105
Яна24187
Панас9500
Тарас50

Вивести угоди, здійснені у 2022 році, відсортувавши за іменем покупця з виведенням імен юзерів та назв товарів замість ідентифікаторів.

SELECT deals.id, users.name AS user_name, goods.title AS good_title, deals.price, deals.quantity, deals.when_bought FROM deals
INNER JOIN users ON users.id=deals.user_id
INNER JOIN goods ON goods.id=deals.good_id
WHERE deals.when_bought >= '2022-01-01' AND deals.when_bought <= '2022-12-31'
ORDER BY users.name ASC

iduser_namegood_titlepricequantitywhen_bought
3МиколаЛампа10532022-10-11
17МиколаСамокат2800022022-05-12
6ПанасТелефон950012022-05-09
2СніжанаВелосипед3600032022-12-09
7СніжанаНоутбук3800022022-07-29
4ТарасБлокнот5022022-10-18
16ЯнаВелосипед2400022022-09-27

Вивести угоди з велосипедами, придбаними у 2022 році, відсортувавши за іменем покупця з виведенням імен юзерів та назв товарів замість ідентифікаторів.

SELECT deals.id, users.name AS user_name, goods.title AS good_title, deals.price, deals.quantity, deals.when_bought FROM deals
INNER JOIN users ON users.id=deals.user_id
INNER JOIN goods ON goods.id=deals.good_id
WHERE deals.when_bought >= '2022-01-01' AND deals.when_bought <= '2022-12-31'
AND goods.id = 1
ORDER BY users.name ASC

iduser_namegood_titlepricequantitywhen_bought
2СніжанаВелосипед3600032022-12-09
16ЯнаВелосипед2400022022-09-27

Показати, скільки грошей приніс продаж велосипедів.

SELECT SUM(price) AS bicycle_income FROM deals WHERE good_id = 1

bicycle_income
108000

Показати, скільки грошей приносив продаж велосипедів у кожному році, коли відбувались такі продажі.

SELECT YEAR(when_bought) AS year, SUM(price) AS bicycle_income FROM deals WHERE good_id = 1 GROUP BY year

yearbicycle_income
202036000
202260000
202312000