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


-- 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 Исполнители.Наименование;