-- 1. Вывести список трех самых популярных музыкальных треков (записей) с наименованием жанра и наименованием исполнителя
SELECT TOP 3 З.Наименование AS Трек, Ж.Наименование AS Жанр, И.Наименование AS Исполнитель
FROM Записи З
JOIN Жанры Ж ON З.Код_жанра = Ж.Код_жанра
JOIN Исполнители И ON З.Код_исполнителя = И.Код_исполнителя
ORDER BY З.Рейтинг DESC;
-- 2. Вывести количество записей каждого жанра
SELECT Ж.Наименование AS Жанр, COUNT(З.Код_записи) AS Количество_записей
FROM Жанры Ж
LEFT JOIN Записи З ON Ж.Код_жанра = З.Код_жанра
GROUP BY Ж.Наименование;
-- 3. Вывести список записей, звучащих на радиостанции в каждый период времени (пример для ночного периода)
SELECT DISTINCT З.Наименование, 'Ночной период' AS Период
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. Вывести список трех самых коротких муз. записей
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. Вывести список сотрудников, которые в ночной период запускали записи жанра X
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. Вывести запись, которая оставалась популярной более двух месяцев
SELECT Наименование
FROM Записи
WHERE Рейтинг >= 8
AND DATEDIFF(month, Дата_записи, GETDATE()) > 2;
-- 8. Вывести рейтинг 3-ех самых популярных муз. записей
SELECT TOP 3 Наименование, Рейтинг
FROM Записи
ORDER BY Рейтинг DESC;
-- 9. Вывести название месяца, в который была популярна каждая запись
SELECT Наименование, DATENAME(month, Дата_записи) AS Месяц_популярности
FROM Записи
WHERE Рейтинг >= 8;
-- 10. Вывести среднее количество запуска записей в день, которое позволило муз. записи стать популярной
SELECT Зп.Наименование,
CAST(COUNT(З.Код_записи) AS FLOAT) / COUNT(DISTINCT З.Дата) AS Среднее_запусков_в_день
FROM (
SELECT Дата, Код_записи_1 AS Код_записи FROM График_работы WHERE Код_записи_1 IS NOT NULL
UNION ALL
SELECT Дата, Код_записи_2 FROM График_работы WHERE Код_записи_2 IS NOT NULL
UNION ALL
SELECT Дата, Код_записи_3 FROM График_работы WHERE Код_записи_3 IS NOT NULL
) AS З
JOIN Записи Зп ON З.Код_записи = Зп.Код_записи
WHERE Зп.Рейтинг >= 8
GROUP BY Зп.Наименование;