Skip to content

Instantly share code, notes, and snippets.

@hmel1990
Created February 19, 2025 15:25
Show Gist options
  • Save hmel1990/8a2d892b6c46dbcb68685d2a55867a4e to your computer and use it in GitHub Desktop.
Save hmel1990/8a2d892b6c46dbcb68685d2a55867a4e to your computer and use it in GitHub Desktop.
Подзапросы, создание ДБ
1. Показать самый популярный товар магазина (больше всего раз продавался)
SELECT TOP 1 name AS "название товара", (SELECT SUM (quantity) FROM Sale sl WHERE sl.id_product = p.id) AS total_sold
FROM Product p
ORDER BY total_sold DESC;
2. Если общее количество товаров всех категорий принять за 100%, необходимо посчитать, сколько товаров каждой категории
(в процентном отношении) было продано
SELECT p.name, CAST(CAST(COUNT(s.quantity) * 100.0 / (SELECT COUNT(1) FROM Sale) AS real) AS nvarchar) + '%'
FROM Product p RIGHT JOIN Sale s ON s.id_product = p.id
GROUP BY p.name
3. Показать названия поставщиков, которые не поставляли йогурт
_____________ Вариант № 1 ________________
SELECT s.name
FROM Supplier s
WHERE s.id IN
(
(SELECT d.id_supplier
FROM Delivery d
JOIN Product p ON d.id_product = p.id
WHERE p.name NOT LIKE '%йогурт%')
)
_____________ Вариант № 2 ________________
SELECT s.name
FROM Supplier s
WHERE s.id IN(
(SELECT d.id_supplier
FROM Delivery d
WHERE d.id_product NOT IN(
SELECT p.id
FROM Product p
WHERE p.name LIKE '%йогурт%')))
5. Показать всех производителей, количество наименований товаров которых в магазине больше, чем количество наименований
всех товаров фирмы %Milennium
SELECT pr.name
FROM Producer pr
WHERE
(SELECT COUNT(1)
FROM Product p
WHERE p.id_producer = pr.id)
<
(SELECT COUNT(1)
FROM Product p
WHERE p.id_producer IN (SELECT id FROM Producer pr WHERE pr.name LIKE '%Milennium%'))
6. Показать общее количество продаж по каждому дню, начиная от 15.11.2024, и по сей день. Отсортировать по убыванию даты
_____________ Вариант № 1 ________________
SELECT SUM (sl.quantity) AS quantity, sl.date_of_sale AS date
FROM Sale sl
WHERE sl.date_of_sale >= '2024-11-15'
GROUP BY sl.date_of_sale
ORDER BY 2
_____________ Вариант № 2 ________________
SELECT SUM(sl.quantity) AS quantity, sl.date_of_sale AS date
FROM Sale sl
WHERE sl.date_of_sale >= (SELECT MIN(date_of_sale) FROM Sale WHERE date_of_sale >= '2024-11-15')
GROUP BY sl.date_of_sale
ORDER BY sl.date_of_sale DESC
==============================================================================================================================
CREATE TABLE:
1. написать запросы на создание шести таблиц БД
CREATE DATABASE Book_DB
-- выполняется отдельно
USE Book_DB
CREATE TABLE Themes (
id int PRIMARY KEY identity(1, 1),
name nvarchar(50) UNIQUE
)
CREATE TABLE Country (
id int PRIMARY KEY identity(1, 1),
name nvarchar(50) UNIQUE
)
CREATE TABLE Authors (
id int PRIMARY KEY identity(1, 1),
firstname nvarchar(50),
lastname nvarchar(50),
id_country int REFERENCES Country(id)
)
CREATE TABLE Shops (
id int PRIMARY KEY identity(1, 1),
name nvarchar(50) UNIQUE,
id_country int REFERENCES Country(id)
)
CREATE TABLE Books (
id int PRIMARY KEY identity(1, 1),
name nvarchar(50) UNIQUE,
id_theme int REFERENCES Themes(id),
id_author int REFERENCES Authors(id),
price money,
date_of_publish date,
pages int
)
CREATE TABLE Sales (
id int PRIMARY KEY identity(1, 1),
id_book int REFERENCES Books(id),
date_of_sale date,
price money,
quantity int,
id_shop int REFERENCES Shops(id)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment