CREATE TABLE suppliers (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
email TEXT NOT NULL,
phone TEXT NOT NULL,
address TEXT NOT NULL,
contact_person TEXT,
bank_name TEXT,
bank_account TEXT,
cretated_at TIMESTAMP DEFAULT current_timestamp
);
INSERT INTO suppliers (
name,
email,
phone,
address,
contact_person,
bank_name,
bank_account
) VALUES (
'ОАО “Простор фантазии”',
'contact@profant.ru',
'6985-256-36',
'г. Самара, ул. Тухачевского, д. 231',
'Антонов Игорь Михайлович',
'АО КБ «Солидарность»',
'4080777555666'
),
(
'ОOО “Урал Плюс”',
'info@u-plus.ru',
'6985-256-36',
'г. Екатеринбург, ул. Посадская, д. 57',
'Михайлович Елена Сергеевна',
'ПАО «Банк «Екатеринбург»',
'40804567333455'
),
(
'ОOО “ПермьПромПоставка”',
'info@u-plus.ru',
'6985-256-36',
'г. Пермь, ул. Крисанова, д. 72',
'Сергеева Екатерина Павловна',
'Банк Пермь (АО)',
'4080333999555'
);
CREATE TABLE customers (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
phone TEXT NOT NULL,
address TEXT NOT NULL,
birthday DATE,
cretated_at TIMESTAMP DEFAULT current_timestamp
);
INSERT INTO customers (name, email, phone, address, birthday)
VALUES
('Иноземцев Яков', 'Inyakov@mail.ru', '+7(907)5698234', 'Брянск, Емлютина ул. 3/41', '1973-08-16'),
('Пантелеева Лариса', 'l.panteleeva@yandex.ru', '134-345-88', 'Орел, пл. Ленина д. 1 кв 7', NULL);
CREATE TABLE products (
id SERIAL PRIMARY KEY,
code CHAR(12) NOT NULL UNIQUE,
name VARCHAR(255) NOT NULL,
description TEXT,
category VARCHAR(128) NOT NULL,
origin_country TEXT,
price NUMERIC(9, 2) CHECK (price > 0),
amount INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO products (
name, category, price, amount, description, origin_country, code
) VALUES (
'Чехол силиконовый для iPhone',
'Аксессуары для телефонов',
132.4,
2,
'iPhone X',
'Китай',
'APТ098057483'
), (
'Кольцо-держатель для мобильного телефона с бриллиантами',
'Аксессуары для телефонов',
NULL,
100000,
'',
'Китай',
'APТ098057473'
), (
'Силиконовый ремешок на запястье для телефона',
'Аксессуары для телефонов',
NULL,
0,
'',
'Китай',
'APТ098057472'
), (
'Заколка для волос',
'Модные аксессуары',
194.50,
1,
'Цвета: белый, синий.',
'Китай',
'AМС789030456'
), (
'Брошь "Бабочка"',
'Модные аксессуары',
940.99,
10,
'Металл, Стекло',
'Россия',
'AМК789030456'
), (
'Наклейка на автомобиль "Кот"',
'Аксессуары для автомобилей',
96.50,
3,
'Цвета: белый, черный.',
'Китай',
'AAС789030456'
), (
'Ремешок силиконовый для часов',
'Модные аксессуары',
218,
2,
'Цвета: белый, синий, бежевый.',
'Китай',
'AМС678030456'
), (
'Ремешок для часов кожаный',
'Модные аксессуары',
534,
2,
'Цвет: чёрный',
'Турция',
'AМК678030456'
), (
'Серьги женские вимячие',
'Модные аксессуары',
312,
5,
'Цвет металла:pink purple',
'Турция',
'BWC678030456'
), (
'Браслеты на руку женкие',
'Модные аксессуары',
282,
7,
'Цвет металла:Silver',
'Турция',
'BWC457030456'
), (
'Кулон мужской винтажный',
'Модные аксессуары',
256,
7,
'Цвет металла:Silver,Gold',
'Турция',
'BWC450980456'
), (
'Серьги-гвоздики женские с изумрудами',
'Модные аксессуары',
562,
3,
'Цвет металла:Зелёный',
'Китай',
'BWC450567456'
), (
'Изысканные циркониевые маленькие треугольные серьги',
'Модные аксессуары',
620,
1,
'Цвет основного камня: Black',
'Китай',
'BWC453467456'
), (
'Кольцо женское бижутерия',
'Модные аксессуары',
320,
1,
'Цвет основного камня:Серебристый',
'Китай',
'BWC453467432'
), (
'Солнцезащитные очки OLNYLO мужские/женские',
'Модные аксессуары',
1200,
1,
'Цвет линз:Black-Photochromic',
'Китай',
'BWC453467446'
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer_id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
amount INTEGER NOT NULL CHECK (amount > 0),
price NUMERIC(9, 2) NOT NULL CHECK (price > 0),
paid BOOLEAN,
created_at TIMESTAMP DEFAULT current_timestamp
);
CREATE TABLE sales_report (
category TEXT NOT NULL UNIQUE,
sales_q_1 INTEGER,
sales_q_2 INTEGER,
sales_q_3 INTEGER,
sales_q_4 INTEGER
);
INSERT INTO sales_report VALUES
('Модные аксессуары', 234400, 209300, 211120, 340900),
('Аксессуары для телефонов', 56300, 45450, 72380, 124000);
-- END DUMP --
/* 3.2.1 */
INSERT INTO suppliers (
name,
email,
phone,
address,
contact_person,
bank_name,
bank_account
) VALUES (
'ООО «Птичка»',
'contact@ptichka.ru',
'687-44-55',
'г. Москва, ул. 3-я Ямская, д. 345',
'Голубев Антон Игоревич',
'ООО «МКБ»',
'40801234567890'
);
SELECT * FROM suppliers;
/* 3.2.2 */
INSERT INTO customers (name, email, phone, address, birthday)
VALUES
('Егоров Алексей', 'egorov.a@mail.ru', '+7(912)0764567',
'Калуга, Садовая ул. 75/101', '1994-08-09'),
('Смирнова Светлана', 'sveta2000@yandex.ru', '810 34-345-88',
'Киров, пл. Свободы 3б кв 17', NULL);
SELECT * FROM customers;
/* 3.2.3 */
INSERT INTO products (
name, category, price, amount, description, origin_country, code
) VALUES (
'Туфли женские',
'Обувь',
3200,
10,
'Натуральная кожа. Производство г. Калуга',
'Россия',
'ОЖТ098057483'
), (
'Сандалии мужские',
'Обувь',
2800,
DEFAULT,
'Ткань. Искусственная кожа.',
'Китай',
'ОМС789030456'
), (
'Кроссовки детские',
'Обувь',
1200,
20,
'Серия «Маша и Медведь»',
'Россия',
'ОДК456787651'
);
SELECT * FROM products;
/* 3.5.1 */
SELECT name, phone, email FROM suppliers;
/* 3.5.2 */
SELECT
name, category, description, price
FROM products
WHERE
category= 'Модные аксессуары' AND
amount > 0 AND
description ILIKE '%синий%';
-- SELECT ' 3.5.3 ' задание;
SELECT
name, category, price, amount
FROM products
WHERE
origin_country = 'Китай' AND
(price <= 1000 OR amount <= 3);
/* 3.8.1 */
SELECT name, description, origin_country, price
FROM products
WHERE category = 'Модные аксессуары' AND amount > 0
ORDER BY price DESC;
/* 3.8.2 */
SELECT name, description, origin_country, price
FROM products
WHERE category = 'Модные аксессуары' AND amount > 0
ORDER BY price DESC
LIMIT 5 OFFSET 10;
/* 3.8.3 */
SELECT DISTINCT origin_country
FROM products
WHERE amount > 0
ORDER BY origin_country ASC;
/* 3.11.1 */
SELECT origin_country FROM products
WHERE code IN ('BWC457030456', 'BWC450980456');
UPDATE products
SET origin_country = 'Китай'
WHERE code IN ('BWC457030456', 'BWC450980456');
SELECT origin_country FROM products
WHERE code IN ('BWC457030456', 'BWC450980456');
/* 3.11.2 */
SELECT bank_name, bank_account
FROM suppliers
WHERE name = 'ОOО “Урал Плюс”';
UPDATE suppliers
SET bank_name = 'Банк “УБРиР” (ПАО)',
bank_account = '4180566789764'
WHERE name = 'ОOО “Урал Плюс”';
SELECT bank_name, bank_account
FROM suppliers
WHERE name = 'ОOО “Урал Плюс”';
/* 3.11.3 */
DELETE FROM products
WHERE price IS NULL;
/* 3.11.4 */
TRUNCATE TABLE orders RESTART IDENTITY;
/* 3.13.1 */
SELECT
category,
sales_q_4::REAL / (sales_q_1 + sales_q_2 + sales_q_3 + sales_q_4)
FROM sales_report
ORDER BY category ASC;
/* 3.13.2 */
SELECT
name,
CASE
WHEN origin_country != 'Россия' THEN 'Импорт'
ELSE 'Россия'
END origin
FROM products;
/* 3.13.3 */
UPDATE products
SET price = CASE
WHEN origin_country = 'Россия' THEN price * 0.95
WHEN origin_country = 'Турция' THEN price * 1.03
END
WHERE
amount > 0 AND
origin_country IN ('Россия', 'Турция');
/* 3.15.1 */
CREATE TABLE product_categories (
id SMALLSERIAL,
name TEXT NOT NULL UNIQUE
);
INSERT INTO product_categories (name)
SELECT DISTINCT category
FROM products;
SELECT * FROM product_categories;
/* 3.15.2 */
INSERT INTO suppliers (
name,
address,
email,
phone
) VALUES (
'ООО “Улыбка”',
'г. Владимир, ул. Белая, д. 3-Б, к 1',
'ulybka.ooo@yandex.ru',
'8674-34-92'
),
(
'ОАО “Простор фантазии”',
'г. Самара, ул. Тухачевского, д. 231',
'office@profant.ru',
'6985-256-66'
) ON CONFLICT (name) DO UPDATE
SET
address = excluded.address,
email = excluded.email,
phone = excluded.phone
;