diff --git a/migration.sql b/migration.sql new file mode 100644 index 0000000..14e5743 --- /dev/null +++ b/migration.sql @@ -0,0 +1,41 @@ +CREATE TABLE IF NOT EXISTS genres ( + genre_id SERIAL PRIMARY KEY, + name VARCHAR(30) NOT NULL UNIQUE +); + +CREATE TABLE IF NOT EXISTS publishers ( + publisher_id SERIAL PRIMARY KEY, + name VARCHAR(50) NOT NULL UNIQUE +); + +INSERT INTO genres (name) +SELECT DISTINCT genre +FROM board_games +WHERE genre IS NOT NULL; + +INSERT INTO publishers (name) +SELECT DISTINCT publisher +FROM board_games +WHERE publisher IS NOT NULL; + +ALTER TABLE board_games +ADD COLUMN genre_id INT, +ADD COLUMN publisher_id INT; + +UPDATE board_games +SET genre_id = g.genre_id +FROM genres g +WHERE board_games.genre = g.name; + +UPDATE board_games +SET publisher_id = p.publisher_id +FROM publishers p +WHERE board_games.publisher = p.name; + +ALTER TABLE board_games +DROP COLUMN genre, +DROP COLUMN publisher; + +ALTER TABLE board_games +ADD CONSTRAINT fk_genre FOREIGN KEY (genre_id) REFERENCES genres (genre_id), +ADD CONSTRAINT fk_publisher FOREIGN KEY (publisher_id) REFERENCES publishers (publisher_id); \ No newline at end of file diff --git a/requests.sql b/requests.sql new file mode 100644 index 0000000..6e80a81 --- /dev/null +++ b/requests.sql @@ -0,0 +1,46 @@ +--- Зарегистрировать нового пользователя +insert into clients (forename, surname, patronymic, age, phone_number, email) +values ('Иван', 'Иванович', 'Иванов', 22, '+71234567890', 'test@email.com'); + +--- Вывести доступные категории настольных игр +select name from sections; + +--- Вывод названия игры и цена при условии что цена меньше 2000 руб (для незарегистрированного пользователя) +set lc_monetary to 'ru_RU.UTF-8'; +select name, price +from board_games +where price::numeric < 2000; + +--- Вывод самых дорогих игр с жанрами и издателями +set lc_monetary to 'ru_RU.UTF-8'; +select + board_games.name as name, + genres.name as genre, + publishers.name as publisher, + board_games.price as price +from + board_games + join genres using(genre_id) + join publishers using(publisher_id) +order by + price desc +limit 10; + +--- Вывод количества продаж за период +set lc_monetary to 'ru_RU.UTF-8'; +select + board_games.name as name, + publishers.name as publisher, + board_games.price as price, + sum(orders_games.count) as sells +from + board_games + join publishers using(publisher_id) + join orders_games using(board_game_id) + join orders using(order_id) +where + orders.order_date BETWEEN '2024-12-16' AND '2024-12-20'; +group by + board_games.name, publishers.name, board_games.price +order by + publishers.name \ No newline at end of file