Created
February 19, 2025 15:25
-
-
Save hmel1990/8a2d892b6c46dbcb68685d2a55867a4e to your computer and use it in GitHub Desktop.
Подзапросы, создание ДБ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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