- •Задание
- •Графическое представление связей между таблицами
- •Структуры таблиц баз данных
- •Содержание таблиц баз данных
- •Руководство пользователя
- •Тексты запросов и примеры работы
- •Для каждого вида товара выдать список постоянных клиентов, отсортированный:
- •По дате приобретения
- •В алфавитном порядке
- •По стоимости
- •Анализ результатов и выводы
- •Список использованной литературы
Руководство пользователя
Разработанный клиент БД является web-приложением, работающим в любом современном интернет-браузере, включая мобильные платформы.
В левой части окна находится вертикальное меню с:
Выбором роли
Вводом данных
Редактированием данных
Просмотром данных
Операциями из задания данной работы, и отображения результатов выборок с возможностью их параметризации (ввод кол-ва чего-либо, названия, даты и пр.):
Ввод данных в таблицу продуктов
Редактирование данных в таблице продуктов
Сначала из списка выбирается нужный продукт и нажимается кнопка «Редактировать товар», затем появляется список полей выбранного товара, которые можно изменять.
Постраничный просмотр данных в таблице продуктов
На одной странице отображается по 15 продуктов, на приведенном скриншоте отображена вторая страница.
Тексты запросов и примеры работы
Для каждого вида товара выдать список постоянных клиентов, отсортированный:
По дате приобретения
SELECT
t.name as product_type,
p.name as product_name,
o.created as order_date,
c.name as client_name
FROM
zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
JOIN zf322_belich.orders as o ON o.id = otp.orders
JOIN zf322_belich.clients as c ON c.id = o.clients
ORDER BY
p.id ASC,
o.created DESC
В алфавитном порядке
SELECT
t.name as product_type,
p.name as product_name,
o.created as order_date,
c.name as client_name
FROM
zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
JOIN zf322_belich.orders as o ON o.id = otp.orders
JOIN zf322_belich.clients as c ON c.id = o.clients
ORDER BY
p.id ASC,
c.name ASC
По стоимости
SELECT
t.name as product_type,
p.name as product_name,
p.price as product_price,
o.created as order_date,
c.name as client_name
FROM
zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
JOIN zf322_belich.orders as o ON o.id = otp.orders
JOIN zf322_belich.clients as c ON c.id = o.clients
ORDER BY
p.id ASC,
p.price DESC
Для каждого вида товара указать сведения о поставщике (псевдоним, адрес и т.д.)
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price,
s.name as source_name,
s.address as source_address
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
LEFT JOIN zf322_belich.sources as s ON s.id = p.sources
ORDER BY
p.price DESC
Найти самый дорогой вид товара, самый старый по году, найти товары с ценой свыше 2000 р. (и любая другая сумма, т.е. предусмотреть ввод цены с клавиатуры)
самый дорогой
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
ORDER BY
p.price DESC
LIMIT 1
самый старый по году
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
ORDER BY
p.created ASC
LIMIT 1
товары с ценой свыше 2000 р.
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
WHERE p.price > 2000
ORDER BY
p.price ASC
произвольный ввод цены
SELECT t.name as product_type, p.name as product_name, p.created as product_date, p.price as product_price FROM zf322_belich.products AS p JOIN zf322_belich.types as t ON t.id = p.types WHERE p.price > $1 ORDER BY p.price ASC
Найти объем продаж заданного товара
за квартал
SELECT
COUNT(o.created) AS count
FROM zf322_belich.products AS p
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders
WHERE p.id = 3 AND o.created BETWEEN '2016-01-01' AND '2016-04-30'
за год
SELECT
COUNT(o.created) AS count
FROM zf322_belich.products AS p
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders
WHERE p.id = 3 AND extract(year from o.created) = 2016
за этот же период среднюю цену
SELECT
round(AVG(p.price), 2) AS average_price
FROM zf322_belich.products AS p
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders
WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'
за этот же период самую дорогую
SELECT
MAX(p.price) AS max_price
FROM zf322_belich.products AS p
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders
WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'
за этот же период самую дешевую вещь
SELECT
MIN(p.price) AS min_price
FROM zf322_belich.products AS p
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON o.id = otp.orders
WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'
Найти товары, поставляемые заданным поставщиком (выбор поставщика), чья дата продажи находится в заданных пределах (ввод интервала)
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price,
o.created as order_date
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON otp.orders = o.id
WHERE p.sources = 2 AND o.created BETWEEN '2016-01-01' AND '2016-04-30'
Найти все товары для заданного места выпуска (выбор места), чья стоимость находится в заданных пределах (ввод интервала)
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
WHERE p.places = 4 AND p.price BETWEEN 3000 AND 4000
Найти долю антиквариата, проданного за определенный период (ввод периода) от общего времени продажи
SELECT
COUNT(p.id) * 100 / (SELECT COUNT(id) FROM zf322_belich.products) as percent
FROM zf322_belich.products AS p
LEFT JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
LEFT JOIN zf322_belich.orders as o ON otp.orders = o.id
WHERE o.created BETWEEN '2016-01-01' AND '2016-03-30'
Найти весь товар, проступивший от заданного поставщика, чья стоимость больше, чем средняя стоимость заданного товара (выбор наименования), поступившего из заданной страны (выбор страны)
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
WHERE p.sources = 2 AND p.price > (SELECT AVG(price) as price FROM zf322_belich.products WHERE types = 2 AND places = 1)
Найти долю дешевого товара (чья стоимость меньше заданной, ввод стоимости), поступившего от заданного поставщика и в целом
SELECT
SUM(CASE WHEN p.price < 2000 AND p.sources = 2 then 1 else 0 end) * 100 / count(*)||'%' as source_percent,
SUM(CASE WHEN p.price < 2000 THEN 1 else 0 end) * 100 / count(*)||'%' as total_percent
FROM zf322_belich.products as p
Найти среднюю стоимость товара, проданного за определенный промежуток времени (ввод интервала)
SELECT
round(AVG(p.price), 2) as average_price
FROM zf322_belich.products as p
JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
JOIN zf322_belich.orders as o ON otp.orders = o.id
WHERE o.created BETWEEN '2016-01-01' AND '2016-04-30'
Найти весь товар, чья стоимость выше, чем средняя стоимость товара заданного производителя
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
WHERE p.price > (SELECT AVG(price) as price FROM zf322_belich.products WHERE sources = 2)
Найти товар, который лучше всего раскупают, указать параметры (стоимость, производитель и т.д.)
SELECT
t.name as product_type,
p.name as product_name,
p.created as product_date,
p.price as product_price,
s.name as source_name,
COUNT(p.id) total_sales
FROM zf322_belich.products AS p
JOIN zf322_belich.types as t ON t.id = p.types
JOIN zf322_belich.sources as s ON s.id = p.sources
JOIN zf322_belich.orders_to_products as otp ON otp.products = p.id
JOIN zf322_belich.orders as o ON otp.orders = o.id
GROUP BY p.id, t.name, s.name
ORDER BY total_sales DESC
LIMIT 1
