-- 1. Вывод 3 лучших записей по рейтингу с указанием названия жанра и исполнителя
SELECT TOP 3
Записи.Наименование,
Жанры.Наименование,
Исполнители.Наименование
FROM Записи
JOIN Жанры ON Записи.Код_жанра = Жанры.Код_жанра
JOIN Исполнители ON Записи.Код_исполнителя = Исполнители.Код_исполнителя
ORDER BY Записи.Рейтинг DESC;
-- 2. Подсчет количества записей для каждого жанра
SELECT
Жанры.Наименование,
COUNT(Записи.Код_записи)
FROM Жанры
LEFT JOIN Записи ON Жанры.Код_жанра = Записи.Код_жанра
GROUP BY Жанры.Наименование;
-- 3. Вывод уникальных названий треков, которые играли в ночное время (с 00:00 до 06:00)
SELECT DISTINCT Записи.Наименование
FROM Записи
JOIN График_работы ON Записи.Код_записи IN (График_работы.Код_записи_1, График_работы.Код_записи_2, График_работы.Код_записи_3)
WHERE (График_работы.Время_1 BETWEEN '00:00' AND '06:00')
OR (График_работы.Время_2 BETWEEN '00:00' AND '06:00')
OR (График_работы.Время_3 BETWEEN '00:00' AND '06:00');
-- 4. Вывод 3 самых коротких треков
SELECT TOP 3
Наименование,
Длительность
FROM Записи
ORDER BY Длительность ASC;
-- 5. Треки, которые ни разу не попадали в эфир (отсутствуют в графике работы)
SELECT Наименование
FROM Записи
WHERE Код_записи NOT IN (
SELECT Код_записи_1 FROM График_работы WHERE Код_записи_1 IS NOT NULL
UNION
SELECT Код_записи_2 FROM График_работы WHERE Код_записи_2 IS NOT NULL
UNION
SELECT Код_записи_3 FROM График_работы WHERE Код_записи_3 IS NOT NULL
);
-- 6. Сотрудники, которые ставили жанр 'Рок' в ночное время
SELECT DISTINCT Сотрудники.ФИО
FROM Сотрудники
JOIN График_работы ON Сотрудники.Код_сотрудника = График_работы.Код_сотрудника
JOIN Записи ON Записи.Код_записи IN (График_работы.Код_записи_1, График_работы.Код_записи_2, График_работы.Код_записи_3)
JOIN Жанры ON Записи.Код_жанра = Жанры.Код_жанра
WHERE Жанры.Наименование = 'Рок'
AND (
(График_работы.Время_1 BETWEEN '00:00' AND '06:00' AND График_работы.Код_записи_1 = Записи.Код_записи) OR
(График_работы.Время_2 BETWEEN '00:00' AND '06:00' AND График_работы.Код_записи_2 = Записи.Код_записи) OR
(График_работы.Время_3 BETWEEN '00:00' AND '06:00' AND График_работы.Код_записи_3 = Записи.Код_записи)
);
-- 7. Треки с рейтингом 8 и выше, добавленные более 2 месяцев назад
SELECT Наименование
FROM Записи
WHERE Рейтинг >= 8
AND DATEDIFF(month, Дата_записи, GETDATE()) > 2;
-- 8. Список сотрудников с указанием их должностей и окладов (по убыванию оклада)
SELECT
Сотрудники.ФИО,
Должности.Наименование_должности,
Должности.Оклад
FROM Сотрудники
JOIN Должности ON Сотрудники.Код_должности = Должности.Код_должности
ORDER BY Должности.Оклад DESC;
-- 9. Подсчет количества созданных/добавленных записей по месяцам
SELECT
DATENAME(month, Дата_записи),
COUNT(Код_записи)
FROM Записи
GROUP BY DATENAME(month, Дата_записи);
-- 10. Средняя длительность треков каждого исполнителя
SELECT
Исполнители.Наименование,
AVG(Записи.Длительность)
FROM Записи
JOIN Исполнители ON Записи.Код_исполнителя = Исполнители.Код_исполнителя
GROUP BY Исполнители.Наименование;