Загрузка данных


-- 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 Зп.Наименование;