--4.1
--цена которых не превышает 100 рублей
SELECT product_id,
name,
price
FROM products
WHERE price <= 100
ORDER BY product_id
--4.2
--Отберите пользователей женского пола из таблицы users. Выведите только id этих пользователей.
SELECT user_id
FROM users
WHERE sex = 'female'
ORDER BY user_id limit 1000
--4.3
--Отберите из таблицы user_actions все действия пользователей по созданию заказов,
--которые были совершены ими после полуночи 6 сентября 2022 года.
SELECT order_id,
time,
user_id
FROM user_actions
WHERE time > '2022-09-06'
and action = 'create_order'
ORDER BY order_id
--4.4
--Назначьте скидку 20% на все товары из таблицы products
--и отберите те, цена на которые с учётом скидки превышает 100 рублей
SELECT product_id,
name,
price as old_price,
price * 0.8 as new_price
FROM products
WHERE price * 0.8 > 100
ORDER BY product_id
--4.5
--Отберите из таблицы products все товары, названия которых либо начинаются со слова «чай»,
--либо состоят из пяти символов.
--Для решения задачи в операторе WHERE к колонке с названиями товаров необходимо
--применить функцию SPLIT_PART, разделив наименования по пробелу на отдельные слова
--и отобрав только те, в которых первое слово - «чай». Также через «ИЛИ» необходимо добавить
--второе условие с функцией LENGTH для проверки, что наименование состоит ровно из 5 символов.
SELECT product_id,
name
FROM products
WHERE split_part(name, ' ', 1) = 'чай'
or length(name) = 5
ORDER BY product_id
--4.6
SELECT product_id,
name
FROM products
WHERE name like '%чай%'
ORDER BY product_id
--4.7
--Выберите из таблицы products id и наименования только тех товаров, названия которых
--начинаются на букву «с» и содержат только одно слово
SELECT product_id,
name
FROM products
WHERE name like 'с%'
and name not like '% %'
ORDER BY product_id
--4.8
--все чаи стоимостью больше 60 рублей и вычисляет для них цену со скидкой 25%.
SELECT product_id,
name,
price,
'25%' as discount,
price * 0.75 as new_price
FROM products
WHERE name like 'чай%'
and name not like '%гриб%'
and price > 60
ORDER BY product_id
--Вариант верного решения:
SELECT product_id,
name,
price,
'25%' as discount,
price*0.75 as new_price
FROM products
WHERE name like '%чай %'
and price > 60
ORDER BY product_id
--4.9
--о действиях пользователей с id 170, 200 и 230 за период
--с 25 августа по 4 сентября 2022 года включительно
SELECT user_id,
order_id,
action,
time
FROM user_actions
WHERE time between '2022-08-25'
and '2022-09-05'
and user_id in ('170', '200', '230')
ORDER BY order_id desc
--Вариант верного решения:
SELECT user_id,
order_id,
action,
time
FROM user_actions
WHERE user_id in (170, 200, 230)
and time >= '2022-08-25'
and time < '2022-09-05'
ORDER BY order_id desc
--4.10
SELECT birth_date,
courier_id,
sex
FROM couriers
WHERE birth_date is null
ORDER BY courier_id
--4.11
--50 самых молодых пользователей мужского пола
SELECT user_id,
birth_date
FROM users
WHERE birth_date is not null
and sex = 'male'
ORDER BY birth_date desc limit 50
--4.12
--последних 10 заказов, доставленных курьером с id 100
SELECT order_id,
time
FROM courier_actions
WHERE action = 'deliver_order'
and courier_id = '100'
ORDER BY time desc limit 10
--4.13
SELECT order_id
FROM user_actions
WHERE action = 'create_order'
and date_part('month', time) = '08'
ORDER BY order_id
--Вариант верного решения:
SELECT order_id
FROM user_actions
WHERE action = 'create_order'
and date_part('month', time) = 8
and date_part('year', time) = 2022
ORDER BY order_id
--4.14
--с 1990 по 1995 год включительно
SELECT courier_id
FROM couriers
WHERE date_part('year', birth_date) between '1990'
and '1995'
ORDER BY courier_id
--Вариант верного решения:
SELECT courier_id
FROM couriers
WHERE date_part('year', birth_date) between 1990
and 1995
ORDER BY courier_id
--4.15
--в течение августа 2022 года по средам с 12:00 до 15:59.
--В PostgreSQL дни недели считаются с воскресенья (0) до субботы (6)
SELECT user_id,
order_id,
action,
time
FROM user_actions
WHERE action = 'cancel_order'
and date_part('year', time) = 2022
and date_part('month', time) = 8
and date_part('dow', time) = 3
and date_part('hour', time) between '12'
and '15'
and date_part('minute', time) between '00'
and '59'
ORDER BY order_id desc
--Вариант верного решения:
SELECT user_id,
order_id,
action,
time
FROM user_actions
WHERE action = 'cancel_order'
and date_part ('dow', time) = 3
and date_part ('month' , time) = 8
and date_part('hour', time) between 12
and 15
and date_part('year', time) = 2022
ORDER BY order_id desc
--4.16
SELECT product_id,
name,
price,
case when name in ('сахар', 'сухарики', 'сушки', 'семечки', 'масло льняное', 'виноград',
'масло оливковое', 'арбуз', 'батон', 'йогурт', 'сливки', 'гречка', 'овсянка', 'макароны', 'баранина',
'апельсины', 'бублики', 'хлеб', 'горох', 'сметана', 'рыба копченая', 'мука', 'шпроты', 'сосиски',
'свинина', 'рис', 'масло кунжутное', 'сгущенка', 'ананас', 'говядина', 'соль', 'рыба вяленая',
'масло подсолнечное', 'яблоки', 'груши', 'лепешка', 'молоко', 'курица', 'лаваш', 'вафли', 'мандарины')
then round(price/110*10,
2)
else round(price/120*20, 2) end as tax,
case when name in ('сахар', 'сухарики', 'сушки', 'семечки', 'масло льняное',
'виноград', 'масло оливковое', 'арбуз', 'батон', 'йогурт', 'сливки', 'гречка',
'овсянка', 'макароны', 'баранина', 'апельсины', 'бублики', 'хлеб', 'горох', 'сметана',
'рыба копченая', 'мука', 'шпроты', 'сосиски', 'свинина', 'рис', 'масло кунжутное', 'сгущенка',
'ананас', 'говядина', 'соль', 'рыба вяленая', 'масло подсолнечное', 'яблоки', 'груши', 'лепешка',
'молоко', 'курица', 'лаваш', 'вафли', 'мандарины') then round(price - price/110*10,
2)
else round(price - price/120*20, 2) end as price_before_tax
FROM products
ORDER BY price_before_tax desc, product_id
To embed this project on your website, copy the following code and paste it into your website's HTML: