Compare commits

3 Commits

Author SHA1 Message Date
av.kalyanov
e036eb1f78 Add base_sql.sql 2026-04-26 10:53:07 +03:00
av.kalyanov
2907c0379a Add dml.sql and fix ddl.sql 2026-04-26 08:52:50 +03:00
av.kalyanov
467787a1d1 Add first ddl 2026-04-26 08:07:24 +03:00
3 changed files with 180 additions and 0 deletions

98
SQL/base_sql.sql Normal file
View File

@@ -0,0 +1,98 @@
-- Задание 1 — Спроектируй «карточку пользователя»
-- Ты делаешь экран “Пользователи” в админке и решаешь, какие поля там важны.
select
id,
name,
country,
created_at,
email
from
users
order by
created_at desc,
name asc;
-- Задание 2 — Сегментация по странам (с выбором)
-- Маркетолог хочет понять, какая страна сейчас интереснее.
select
id,
name,
country
from
users
where
country = 'US'
order by
name asc;
select
id,
name,
country
from
akalyanov.users
where
country = 'UK'
order by
name asc;
-- Задание 3 — Контакты для рассылки (думать про качество)
-- Нужно сделать список email для рассылки так, чтобы его не стыдно было отдавать маркетологу.
select
id,
name,
email
from
users
where
email is not null
order by
name;
select
DISTINCT LOWER(email) as email_lower
from
users
where
email is not null
order by
email_lower;
-- Задание 4 — Новички и активность
-- «Тебе нужно посмотреть, кто пришёл недавно и кого стоит “подогреть”.»
select
id,
name,
created_at
from
users
where
created_at > '2024-01-11'
order by
created_at desc;
select
id,
name,
created_at
from
users
where
created_at > '2024-01-11'
order by
created_at desc
limit
3;
-- Оффсет используется для пагинации
select
id,
name,
created_at
from
users
where
created_at > '2024-01-11'
order by
created_at desc
limit
2 offset 1;

36
SQL/ddl.sql Normal file
View File

@@ -0,0 +1,36 @@
-- Таблица пользователей
create table akalyanov.users (
id int primary key,
name varchar(100) not null,
age smallint,
email varchar(100),
country varchar(2),
is_active boolean,
created_at timestamp not null
);
-- Таблица продуктов
create table akalyanov.products (
id int primary key,
name varchar(100) not null,
category varchar(50),
price decimal(10,2) not null,
in_stock boolean
);
-- Таблица заказов
create table akalyanov.orders (
id int primary key,
user_id int,
order_date timestamptz not null,
status varchar(20),
foreign key (user_id) references akalyanov.users(id)
);
-- Таблица товаров в заказе
create table akalyanov.order_items (
order_id int,
product_id int,
quantity smallint not null,
price_at_purchase decimal(10,2) not null,
primary key (order_id, product_id),
foreign key (order_id) references akalyanov.orders(id),
foreign key (product_id) references akalyanov.products(id)
);

46
SQL/dml.sql Normal file
View File

@@ -0,0 +1,46 @@
-- Добавление пользователей в таблицу users
insert into akalyanov.users (id, name, age, email, country, is_active, created_at) values
(1, 'Alice', 25, 'alice@example.com', 'US', true, '2024-01-10 10:00:00'),
(2, 'Bob', 30, 'bob@example.com', 'UK', true, '2024-02-05 09:30:00'),
(3, 'Carol', 27, 'carol@example.com', 'US', false, '2024-03-01 15:20:00'),
(4, 'Diana', 22, 'diana@GMAIL.com', 'US', true, '2024-01-12 08:15:00'),
(5, 'Evan', 35, 'EVAN@example.com', 'UK', true, '2024-01-18 19:40:00'),
(6, 'Farida', 29, 'farida@example.com', 'KZ', true, '2024-02-20 11:05:00'),
(7, 'George', 31, 'george+test@example.com', 'US', true, '2024-03-05 16:45:00'),
(8, 'Helen', 24, NULL, 'UK', false, '2024-03-06 08:20:00'),
(9, 'Ivan', 26, 'ivan@example.com', 'RU', true, '2024-01-11 14:30:00'),
(10, 'Julia', 28, 'julia@example.com', 'US', true, '2024-03-07 18:05:00');
-- Добавление товаров в таблицу products
insert into akalyanov.products (id, name, category, price, in_stock) values
(1, 'iPhone 15', 'Электроника', 80000, true),
(2, 'Kindle', 'Электроника', 15000, true),
(3, 'Кроссовки Nike', 'Одежда', 9000, true),
(4, 'Кроссовки NoName', 'Одежда', 3000, false),
(5, 'Наушники Pro', 'Электроника', 12000, true),
(6, 'Фитнес‑браслет', 'Гаджеты', 6000, true),
(7, 'Подарочная карта', 'Сервисы', 1000, true);
-- Добавление заказов в таблицу orders
insert into akalyanov.orders (id, user_id, order_date, status) values
(1, 1, '2025-01-10 12:00:00', 'paid'),
(2, 3, '2025-01-12 09:30:00', 'cancelled'),
(3, 1, '2025-01-15 18:20:00', 'paid'),
(4, 2, '2025-01-20 11:05:00', 'created'),
(5, 4, '2025-02-01 17:45:00', 'paid'),
(6, 5, '2025-02-10 10:10:00', 'refunded'),
(7, 7, '2025-03-01 09:00:00', 'paid'),
(8, 9, '2025-03-05 19:30:00', 'paid');
-- Добавление товаров в таблицу order_items
insert into akalyanov.order_items (order_id, product_id, quantity, price_at_purchase) values
(1, 1, 1, 78000),
(1, 3, 2, 8500),
(2, 2, 1, 14000),
(3, 5, 1, 11000),
(3, 7, 1, 1000),
(4, 2, 1, 15000),
(5, 6, 1, 6000),
(6, 1, 1, 82000),
(7, 3, 1, 9000),
(8, 4, 2, 2800);