Загрузка данных


CREATE DATABASE CoffeeShopDB;
CREATE TABLE baristas (
id SERIAL PRIMARY KEY,
full_name VARCHAR(150) NOT NULL,
hire_date DATE NOT NULL,
is_active BOOLEAN NOT NULL
);
CREATE TABLE menu_items (
id SERIAL PRIMARY KEY,
name VARCHAR(150) NOT NULL,
category VARCHAR(300) NOT NULL,
price DECIMAL(10,2) NOT NULL,
is_available BOOLEAN NOT NULL
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
barista_id INT NOT NULL, FOREIGN KEY (barista_id) REFERENCES baristas(id),
order_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
total_amount DECIMAL(10,2) NOT NULL,
payment_method VARCHAR(50) NOT NULL
);
CREATE TABLE order_details (
id SERIAL PRIMARY KEY,
order_id INT NOT NULL, FOREIGN KEY (order_id) REFERENCES orders(id),
menu_item_id INT NOT NULL, FOREIGN KEY (menu_item_id) REFERENCES menu_items(id),
quantity INT NOT NULL,
note TEXT
);

CREATE INDEX idx_orders_barista_id ON orders(barista_id);
CREATE INDEX idx_order_details_order_id ON order_details(order_id);
CREATE INDEX  idx_order_details_menu_items_id ON order_details(menu_item_id);

INSERT INTO baristas (full_name, hire_date, is_active) VALUES
('Иванов Александр', '2023-01-15', TRUE),
('Петрова Мария', '2023-02-20', TRUE),
('Смирнов Дмитрий', '2023-03-10', TRUE),
('Козлова Елена', '2023-04-05', TRUE),
('Новиков Артем', '2023-05-12', FALSE),
('Морозова Анна', '2023-06-18', TRUE),
('Волков Сергей', '2023-07-22', TRUE),
('Соколова Ольга', '2023-08-30', FALSE),
('Кузнецов Максим', '2023-09-14', TRUE),
('Попова Дарья', '2023-10-01', TRUE),
('Лебедев Игорь', '2023-11-08', TRUE),
('Зайцева Наталья', '2023-12-15', FALSE),
('Федоров Павел', '2024-01-10', TRUE),
('Белова Екатерина', '2024-02-05', TRUE),
('Григорьев Роман', '2024-03-20', TRUE);

INSERT INTO menu_items (name, category, price, is_available) VALUES
('Эспрессо', 'Кофе', 150.00, TRUE),
('Американо', 'Кофе', 180.00, TRUE),
('Капучино', 'Кофе', 220.00, TRUE),
('Латте', 'Кофе', 240.00, TRUE),
('Флэт Уайт', 'Кофе', 260.00, TRUE),
('Раф', 'Кофе', 290.00, TRUE),
('Моккачино', 'Кофе', 280.00, TRUE),
('Макиато', 'Кофе', 200.00, TRUE),
('Черный чай', 'Чай', 120.00, TRUE),
('Зеленый чай', 'Чай', 120.00, TRUE),
('Матча Латте', 'Чай', 310.00, TRUE),
('Облепиховый чай', 'Чай', 180.00, TRUE),
('Имбирный чай', 'Чай', 160.00, TRUE),
('Чизкейк', 'Десерты', 350.00, TRUE),
('Тирамису', 'Десерты', 380.00, TRUE),
('Брауни', 'Десерты', 250.00, TRUE),
('Маффин', 'Десерты', 180.00, TRUE),
('Круассан', 'Выпечка', 160.00, TRUE),
('Сэндвич с ветчиной', 'Еда', 320.00, TRUE),
('Сэндвич с лососем', 'Еда', 390.00, TRUE),
('Салат Цезарь', 'Еда', 340.00, TRUE),
('Панкейки', 'Завтраки', 280.00, TRUE),
('Сырники', 'Завтраки', 260.00, TRUE),
('Овсяная каша', 'Завтраки', 190.00, TRUE),
('Глинтвейн', 'Напитки', 330.00, FALSE),
('Какао', 'Напитки', 200.00, TRUE),
('Лимонад', 'Напитки', 170.00, TRUE),
('Смузи', 'Напитки', 250.00, TRUE),
('Молочный коктейль', 'Напитки', 230.00, TRUE),
('Айс Латте', 'Кофе', 260.00, TRUE);

INSERT INTO orders (barista_id, order_time, total_amount, payment_method) VALUES
(1, '2024-03-01 08:15:00', 480.00, 'Наличные'),
(2, '2024-03-01 08:30:00', 220.00, 'Карта'),
(3, '2024-03-01 09:00:00', 630.00, 'Карта'),
(4, '2024-03-01 09:20:00', 150.00, 'Наличные'),
(5, '2024-03-01 09:45:00', 840.00, 'Карта'),
(6, '2024-03-01 10:10:00', 360.00, 'Наличные'),
(7, '2024-03-01 10:30:00', 290.00, 'Карта'),
(8, '2024-03-01 11:00:00', 510.00, 'Карта'),
(9, '2024-03-01 11:25:00', 240.00, 'Наличные'),
(10, '2024-03-01 11:50:00', 700.00, 'Карта'),
(1, '2024-03-01 12:15:00', 380.00, 'Наличные'),
(2, '2024-03-01 12:40:00', 450.00, 'Карта'),
(3, '2024-03-01 13:10:00', 180.00, 'Карта'),
(4, '2024-03-01 13:35:00', 600.00, 'Наличные'),
(5, '2024-03-01 14:00:00', 320.00, 'Карта'),
(6, '2024-03-01 14:20:00', 790.00, 'Карта'),
(7, '2024-03-01 14:50:00', 150.00, 'Наличные'),
(8, '2024-03-01 15:15:00', 540.00, 'Карта'),
(9, '2024-03-01 15:40:00', 280.00, 'Наличные'),
(10, '2024-03-01 16:05:00', 670.00, 'Карта'),
(1, '2024-03-01 16:30:00', 220.00, 'Карта'),
(2, '2024-03-01 17:00:00', 890.00, 'Наличные'),
(3, '2024-03-01 17:25:00', 410.00, 'Карта'),
(4, '2024-03-01 17:50:00', 350.00, 'Карта'),
(5, '2024-03-01 18:20:00', 500.00, 'Наличные'),
(6, '2024-03-01 18:45:00', 240.00, 'Карта'),
(7, '2024-03-01 19:10:00', 620.00, 'Карта'),
(8, '2024-03-01 19:40:00', 180.00, 'Наличные'),
(9, '2024-03-01 20:00:00', 730.00, 'Карта'),
(10, '2024-03-01 20:30:00', 390.00, 'Карта'),
(1, '2024-03-02 08:00:00', 420.00, 'Наличные'),
(2, '2024-03-02 08:30:00', 560.00, 'Карта'),
(3, '2024-03-02 09:10:00', 290.00, 'Карта'),
(4, '2024-03-02 09:40:00', 810.00, 'Наличные'),
(5, '2024-03-02 10:15:00', 150.00, 'Карта'),
(6, '2024-03-02 10:45:00', 440.00, 'Карта'),
(7, '2024-03-02 11:20:00', 670.00, 'Наличные'),
(8, '2024-03-02 11:50:00', 320.00, 'Карта'),
(9, '2024-03-02 12:30:00', 580.00, 'Карта'),
(10, '2024-03-02 13:00:00', 250.00, 'Наличные'),
(1, '2024-03-02 13:30:00', 710.00, 'Карта'),
(2, '2024-03-02 14:00:00', 180.00, 'Наличные'),
(3, '2024-03-02 14:30:00', 490.00, 'Карта'),
(4, '2024-03-02 15:00:00', 360.00, 'Карта'),
(5, '2024-03-02 15:30:00', 850.00, 'Наличные'),
(6, '2024-03-02 16:00:00', 220.00, 'Карта'),
(7, '2024-03-02 16:30:00', 600.00, 'Карта'),
(8, '2024-03-02 17:00:00', 410.00, 'Наличные'),
(9, '2024-03-02 17:30:00', 340.00, 'Карта'),
(10, '2024-03-02 18:00:00', 750.00, 'Карта'),
(1, '2024-03-02 18:30:00', 280.00, 'Наличные'),
(2, '2024-03-02 19:00:00', 520.00, 'Карта'),
(3, '2024-03-02 19:30:00', 190.00, 'Карта'),
(4, '2024-03-02 20:00:00', 680.00, 'Наличные'),
(5, '2024-03-02 20:30:00', 430.00, 'Карта'),
(6, '2024-03-03 08:10:00', 370.00, 'Карта'),
(7, '2024-03-03 08:40:00', 640.00, 'Наличные'),
(8, '2024-03-03 09:15:00', 210.00, 'Карта'),
(9, '2024-03-03 09:45:00', 550.00, 'Карта'),
(10, '2024-03-03 10:20:00', 790.00, 'Наличные');

INSERT INTO order_details (order_id, menu_item_id, quantity, note) VALUES
(1, 1, 2, 'Без сахара'),
(1, 15, 1, NULL),
(2, 3, 1, 'С корицей'),
(3, 4, 2, NULL),
(3, 17, 1, 'Подогреть'),
(4, 1, 1, NULL),
(5, 6, 2, 'На кокосовом'),
(5, 13, 1, NULL),
(6, 2, 2, NULL),
(7, 6, 1, NULL),
(8, 4, 1, 'На миндальном'),
(8, 14, 1, 'Без сиропа'),
(9, 3, 1, NULL),
(10, 5, 2, NULL),
(10, 18, 1, 'С маслом'),
(11, 11, 1, NULL),
(11, 16, 1, NULL),
(12, 8, 2, NULL),
(12, 19, 1, 'Без помидоров'),
(13, 2, 1, NULL),
(14, 7, 2, 'Со взбитыми сливками'),
(14, 22, 1, 'С ягодами'),
(15, 10, 1, NULL),
(15, 21, 1, NULL),
(16, 9, 1, 'С лимоном'),
(16, 20, 1, NULL),
(17, 1, 1, NULL),
(18, 3, 2, 'На соевом'),
(18, 24, 1, 'Со сметаной'),
(19, 12, 1, 'С медом'),
(20, 4, 2, NULL),
(20, 23, 1, 'С кленовым сиропом'),
(21, 6, 1, NULL),
(22, 5, 2, 'Без сахара'),
(22, 14, 1, NULL),
(23, 2, 2, NULL),
(23, 17, 1, 'С шоколадом'),
(24, 11, 1, NULL),
(24, 15, 1, NULL),
(25, 1, 3, 'Двойной эспрессо'),
(26, 8, 1, NULL),
(27, 7, 2, 'С карамелью'),
(27, 22, 1, 'С бананом'),
(28, 9, 1, NULL),
(29, 4, 2, 'Без сахара'),
(29, 19, 1, 'С сыром'),
(30, 6, 1, 'На банановом молоке'),
(30, 16, 1, NULL),
(31, 3, 2, NULL),
(32, 10, 1, NULL),
(32, 21, 1, 'Без сухариков'),
(33, 1, 2, NULL),
(33, 14, 1, 'С вишней'),
(34, 5, 3, NULL),
(35, 2, 1, NULL),
(36, 12, 2, 'С имбирем'),
(36, 24, 1, 'С ягодами'),
(37, 8, 2, NULL),
(37, 18, 2, 'С джемом'),
(38, 4, 1, 'С ванилью'),
(38, 15, 1, NULL),
(39, 7, 2, NULL),
(39, 20, 1, 'Без лука'),
(40, 11, 1, NULL),
(40, 17, 1, 'С орехами'),
(41, 6, 2, 'На миндальном'),
(41, 22, 1, 'С шоколадом'),
(42, 9, 1, 'С мятой'),
(43, 3, 2, NULL),
(43, 23, 1, 'С вареньем'),
(44, 1, 2, NULL),
(44, 16, 1, NULL),
(45, 5, 2, 'Без сахара'),
(45, 19, 1, 'С горчицей'),
(46, 4, 1, NULL),
(47, 8, 2, 'С корицей'),
(47, 13, 1, 'С лимоном'),
(48, 2, 2, NULL),
(48, 21, 1, NULL),
(49, 10, 1, 'С жасмином'),
(49, 24, 1, 'С медом'),
(50, 6, 2, 'На кокосовом'),
(50, 14, 1, 'Без глютена'),
(51, 3, 1, NULL),
(52, 7, 2, 'С карамелью'),
(52, 18, 1, 'С шоколадной пастой'),
(53, 1, 1, NULL),
(54, 11, 2, 'На соевом'),
(54, 15, 1, NULL),
(55, 4, 2, 'С сиропом'),
(55, 20, 1, 'С авокадо'),
(56, 9, 1, NULL),
(57, 5, 2, NULL),
(57, 22, 1, 'С орехами'),
(58, 12, 1, 'Без сахара'),
(59, 8, 2, NULL),
(59, 17, 2, 'С малиной'),
(60, 2, 3, NULL),
(60, 23, 1, 'С сгущенкой'),
(61, 6, 1, NULL),
(61, 16, 1, 'С мороженым');

--1 
INSERT INTO menu_items (name, category, price, is_available) VALUES 
('Фраппучино', 'Кофе', 320.00, TRUE);
INSERT INTO orders (barista_id, order_time, total_amount, payment_method) VALUES
(3, NOW(), 320.00, 'Карта');
INSERT INTO order_details(order_id, menu_item_id, quantity, note) VALUES 
(62, 31, 1, 'Со льдом');
--2
SELECT 
o.id AS order_id,
o.order_time,
o.total_amount,
o.payment_method,
b.full_name
FROM orders o
JOIN baristas b ON o.barista_id = b.id
WHERE
DATE(o.order_time) = CURRENT_DATE;
--3
SELECT
b.id,
b.full_name,
SUM(o.total_amount) AS weekly_revenue
FROM orders o 
JOIN baristas b ON o.barista_id = b.id
WHERE o.order_time >= NOW() - INTERVAL 7 DAY
GROUP BY b.id, b.full_name
ORDER BY weekly_revenue DESC;
--4 
SELECT
mi.id,
mi.name,
SUM(od.quantity) AS total_ordered
FROM order_details od
JOIN menu_items mi ON od.menu_item_id = mi.id
GROUP BY mi.id, mi.name
ORDER BY total_ordered DESC
LIMIT 5;
--5
UPDATE menu_items SET is_available = FALSE
WHERE name = 'Чизкейк';