diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1075.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1075.JPG new file mode 100644 index 0000000..3048d86 Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1075.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1141.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1141.JPG new file mode 100644 index 0000000..77ad312 Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1141.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1251.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1251.JPG new file mode 100644 index 0000000..8aa0d39 Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1251.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1581.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1581.JPG new file mode 100644 index 0000000..e778079 Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1581.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1633.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1633.JPG new file mode 100644 index 0000000..8e8d9ba Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1633.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1729.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1729.JPG new file mode 100644 index 0000000..c5ae3cd Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_1729.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_2356.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_2356.JPG new file mode 100644 index 0000000..971158b Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_2356.JPG differ diff --git a/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_596.JPG b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_596.JPG new file mode 100644 index 0000000..72c7da8 Binary files /dev/null and b/avysokih/postgresql/agragation_leetcode_screens/leetcode_agr_596.JPG differ diff --git a/avysokih/postgresql/command order/command_order.sql b/avysokih/postgresql/command order/command_order.sql new file mode 100644 index 0000000..116fd41 --- /dev/null +++ b/avysokih/postgresql/command order/command_order.sql @@ -0,0 +1,53 @@ +/*Задача 1: Какой будет порядок выполнения у запросов? + +SELECT name, age +FROM users +WHERE is_active = true AND country = 'Canada' +ORDER BY age +LIMIT 3; + +*/ + +1. FROM users +2. WHERE is_active = true AND country = 'Canada' +3. SELECT name, age +4. ORDER BY age +5. LIMIT 3 + + /* +SELECT country, COUNT(*) AS active_users +FROM users +WHERE is_active = true +GROUP BY country +HAVING COUNT(*) > 1; + */ + + 1. FROM users + 2. WHERE is_active = true + 3. GROUP BY country + 4. HAVING COUNT(*) > 1 + 5. SELECT country, COUNT(*) AS active_users + + /* +SELECT country, AVG(age) AS avg_age +FROM users +GROUP BY country +HAVING COUNT(*) >= 3 AND AVG(age) > 25; + */ + + 1. FROM users + 2. GROUP BY country + 3. HAVING COUNT(*) >= 3 AND AVG(age) > 25 + 4. SELECT country, AVG(age) AS avg_age + + /* +SELECT name, age +FROM users +WHERE is_active = false AND age > 30 +ORDER BY name; + */ + + 1. FROM users + 2. WHERE is_active = false AND age > 30 + 3. SELECT name, age + 4. ORDER BY name \ No newline at end of file diff --git a/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1174.JPG b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1174.JPG new file mode 100644 index 0000000..956b130 Binary files /dev/null and b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1174.JPG differ diff --git a/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1327.JPG b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1327.JPG new file mode 100644 index 0000000..e20ccf0 Binary files /dev/null and b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1327.JPG differ diff --git a/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_176.JPG b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_176.JPG new file mode 100644 index 0000000..ef3c1aa Binary files /dev/null and b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_176.JPG differ diff --git a/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_196.JPG b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_196.JPG new file mode 100644 index 0000000..6fc440f Binary files /dev/null and b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_196.JPG differ diff --git a/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1978.JPG b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1978.JPG new file mode 100644 index 0000000..9eef6da Binary files /dev/null and b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_1978.JPG differ diff --git a/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_602.JPG b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_602.JPG new file mode 100644 index 0000000..21239c9 Binary files /dev/null and b/avysokih/postgresql/cte_leetcode_screens/leetcode_cte_602.JPG differ diff --git a/avysokih/postgresql/filtration tasks/filtr_code.sql b/avysokih/postgresql/filtration tasks/filtr_code.sql new file mode 100644 index 0000000..ad69680 --- /dev/null +++ b/avysokih/postgresql/filtration tasks/filtr_code.sql @@ -0,0 +1,104 @@ +-- Создание и заполнение таблицы + +create table products_extended( +id INT primary key, +name TEXT, +category TEXT, +price DECIMAL, +in_stock BOOLEAN, +email_support TEXT +); + +INSERT INTO products_extended (id, name, category, price, in_stock, email_support) VALUES +(1, 'iPhone 14', 'smartphone', 799, TRUE, 'iphone@apple.com'), +(2, 'MacBook Air', 'laptop', 1199, FALSE, NULL), +(3, 'Galaxy S22', 'smartphone', 699, TRUE, 'galaxy@support.com'), +(4, 'ThinkPad X1', 'laptop', 1399, TRUE, 'thinkpad@lenovo.com'), +(5, 'iPad Pro', 'tablet', 999, FALSE, 'ipad@apple.com'), +(6, 'Kindle Paperwhite', 'ebook_reader', 149, TRUE, NULL), +(7, 'Mi Band 7', 'smartwatch', 49, TRUE, 'miband@xiaomi.com'), +(8, 'Surface Pro', 'tablet', 1299, TRUE, 'surface@microsoft.com'), +(9, 'Honor Pad X9', 'tablet', 219, TRUE, 'honor@support.com'), +(10, 'Dell XPS 13', 'laptop', 1099, FALSE, 'dell@support.com'); + +/* +Задача 1: +Выведи все товары, которые: +- в наличии +- НЕ относятся к `smartwatch` и `ebook_reader` +- стоят от 300 до 1300 +И для них посчитай: +1. price с наценкой 10% +2. price с НДС 20% +3. Статус: если email_support IS NULL, подставь нет почты, иначе — сам email +*/ + + +select name, category, price, price * 1.1 as price_with_markup, price * 1.2 as price_with_vat, coalesce(email_support, 'нет почты') as status +from products_extended +where in_stock = true and category not in ('smartwatch', 'ebookreader') and price between 300 and 1300; + +/* +Задача 2: +Найти все товары: +1. У которых цена меньше 150 или больше 1200 +2. У которых** есть email поддержки +Для каждого выведи: +1. Название +2. Категорию +3. Email +4. Цену с прибавкой 25% +5. Отметку `premium` — если цена > 1000 +*/ + +select name, category, email_support, price * 1.25 as price_25, (price> 1000) as premium +from products_extended +where (price < 150 or price > 1200) and email_support is not null +order by premium; + +/* +Задача 3: +Найди все товары: +- где категория — `smartphone`, `laptop`, `tablet` +- название НЕ содержит `'i'` (чтобы исключить Apple) +- цена от 500 до 1300 +Выведи: +- `id`, `name`, `category`, `price` +- отсортируй по `id` +*/ + +select id, name, category, price +from products_extended +where category in('smartphone', 'laptop', 'tablet') and name not like '%i%' and price between 500 and 1300 +order by id desc; + +/* +Задача 4: +Найди товары, у которых: +- email_support IS NULL +- они в наличии +- стоят менее 800 +Выведи: +- `name`, `category`, `price` +- добавь колонку `comment`: `'нет поддержки'` +*/ + +select name, category, price, coalesce (email_support, 'нет поддержки') as comment +from products_extended +where email_support is null and in_stock is not null and price < 800; + +/* +Задача 5: +Найди товары, у которых: +- название заканчивается на `'Pro'` ИЛИ содержит `'X'` внутри (например, `X1`, `XPS`) +- в наличии +- с ценой > 700 +Выведи: +- `name`, `category`, `price` +- флаг `premium` — `true`, если `price > 1000`, иначе `false` +*/ + +select name, category, price, (price>1000) as premium +from products_extended +where (name like '%Pro%' or name like '%X%') and in_stock is true and price > 700 +order by price desc; \ No newline at end of file diff --git a/avysokih/postgresql/functions_leetcode_screens/leetcode_func_1193.JPG b/avysokih/postgresql/functions_leetcode_screens/leetcode_func_1193.JPG new file mode 100644 index 0000000..fafd8bf Binary files /dev/null and b/avysokih/postgresql/functions_leetcode_screens/leetcode_func_1193.JPG differ diff --git a/avysokih/postgresql/functions_leetcode_screens/leetcode_func_1211.JPG b/avysokih/postgresql/functions_leetcode_screens/leetcode_func_1211.JPG new file mode 100644 index 0000000..3169731 Binary files /dev/null and b/avysokih/postgresql/functions_leetcode_screens/leetcode_func_1211.JPG differ diff --git a/avysokih/postgresql/join_leetcode_screens/leetcode_join_1068.JPG b/avysokih/postgresql/join_leetcode_screens/leetcode_join_1068.JPG new file mode 100644 index 0000000..020d556 Binary files /dev/null and b/avysokih/postgresql/join_leetcode_screens/leetcode_join_1068.JPG differ diff --git a/avysokih/postgresql/join_leetcode_screens/leetcode_join_1378.JPG b/avysokih/postgresql/join_leetcode_screens/leetcode_join_1378.JPG new file mode 100644 index 0000000..632ca2f Binary files /dev/null and b/avysokih/postgresql/join_leetcode_screens/leetcode_join_1378.JPG differ diff --git a/avysokih/postgresql/join_leetcode_screens/leetcode_join_577.JPG b/avysokih/postgresql/join_leetcode_screens/leetcode_join_577.JPG new file mode 100644 index 0000000..3ab2d52 Binary files /dev/null and b/avysokih/postgresql/join_leetcode_screens/leetcode_join_577.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_1.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_1.JPG new file mode 100644 index 0000000..3b3dc43 Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_1.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_2.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_2.JPG new file mode 100644 index 0000000..add8cae Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_2.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_3.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_3.JPG new file mode 100644 index 0000000..814cf79 Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_3.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_4.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_4.JPG new file mode 100644 index 0000000..3a734d6 Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_4.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_5.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_5.JPG new file mode 100644 index 0000000..4dd8e3e Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_5.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_fnt.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_fnt.JPG new file mode 100644 index 0000000..620cb65 Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_fnt.JPG differ diff --git a/avysokih/postgresql/select_leetcode_screens/leetcode_select_nbm.JPG b/avysokih/postgresql/select_leetcode_screens/leetcode_select_nbm.JPG new file mode 100644 index 0000000..eccca4e Binary files /dev/null and b/avysokih/postgresql/select_leetcode_screens/leetcode_select_nbm.JPG differ diff --git a/avysokih/postgresql/test_db.sql b/avysokih/postgresql/test_db.sql new file mode 100644 index 0000000..6c2929e --- /dev/null +++ b/avysokih/postgresql/test_db.sql @@ -0,0 +1 @@ +CREATE TABLE test_db;# \ No newline at end of file diff --git a/avysokih/postgresql/window functions/leetcode_180_1.JPG b/avysokih/postgresql/window functions/leetcode_180_1.JPG new file mode 100644 index 0000000..af73249 Binary files /dev/null and b/avysokih/postgresql/window functions/leetcode_180_1.JPG differ diff --git a/avysokih/postgresql/window functions/leetcode_180_2.JPG b/avysokih/postgresql/window functions/leetcode_180_2.JPG new file mode 100644 index 0000000..7b3587e Binary files /dev/null and b/avysokih/postgresql/window functions/leetcode_180_2.JPG differ diff --git a/avysokih/postgresql/window functions/win_func_tasks.sql b/avysokih/postgresql/window functions/win_func_tasks.sql new file mode 100644 index 0000000..87a4388 --- /dev/null +++ b/avysokih/postgresql/window functions/win_func_tasks.sql @@ -0,0 +1,86 @@ +/* +Задача 1: + +Для каждой категории показать 2 строки: +- Самый дорогой товар с email'ом +- Самый дорогой товар без email'а +*/ +with with_mail as ( +select category, name, price, email_support +from ( +select category, name, price, email_support, +row_number() over (partition by category order by price desc) as rn +from products_extended +where email_support is not null +) t +where rn = 1 +), +without_mail as ( +select category, name, price, email_support +from ( +select category, name, price, email_support, +row_number() over (partition by category order by price desc) as rn +from products_extended +where email_support is null +) t +where rn = 1 +) + +select * from with_mail +union all +select * from without_mail +order by category; + +/* +Задача 2: + +Для каждого товара показать: + +- `name` — название товара +- `category` — категория товара +- `price` — цена текущего товара +- `next_price` — цена следующего товара внутри той же категории, упорядоченного по цене +- `diff` — разница между ценой текущего товара и ценой следующего товара +(`price - next_price`) +*/ + +with t as( +select name, category, price, +lead(price) over (partition by category order by price) as next_price +from products_extended) +select name, category, price, next_price, +price - next_price as diff +from t order by category; + +/* +Задача 3: + +Показать `category`, `name`, `price`, `cumulative_sales` + +Где `cumulative_sales` — это сумма `price` **внутри категории** по мере возрастания цены +*/ + +select category, name, price, +sum(price) over (partition by category order by price) as cumulative_sales +from products_extended; + +/* +Задача 4: + +Вывести `category`, `name`, `price`, `avg_price`, `is_above_avg` + +Где `avg_price` — средняя цена по категории + +`is_above_avg = true`, если `price > avg_price` + +*/ + + +with t as( +select category, name, price, +round(avg(price) over (partition by category), 1) as avg_price +from products_extended) +select category, name, price, avg_price, +price > avg_price as is_above_avg +from t order by category; +