wiki:AdvancedReports

Напредни извештаи

Да се излистаат сите албуми според бројот на песни, датумот на објавување и вкупното времетраење

SELECT
    A.album_id,
    A.album_title,
    A.album_date,
    COUNT(S.song_id) AS number_of_songs,
    SUM(C.creation_duration) AS total_duration
FROM
    ALBUM A
JOIN
    SONG S ON A.album_id = S.album_id
JOIN
    CREATION C ON S.creation_id = C.creation_id
GROUP BY
    A.album_id, A.album_title, A.album_date
ORDER BY
    number_of_songs DESC;

Да се излистаат сите подкасти кои што имаат повеќе од 60% позитивни реакции, притоа бројот на коментари да биде поголем од 50

SELECT
    P.podcast_id,
    P.podcast_title,
    COUNT(DISTINCT BC.comment_id) AS number_of_comments,
    COUNT(DISTINCT RW.reaction_id) AS number_of_reactions,
    (COUNT(DISTINCT RW.reaction_id) / COUNT(DISTINCT BC.comment_id)) * 100 AS positive_reaction_percentage
FROM
    PODCAST P
JOIN
    BUZZCOMMENT BC ON P.podcast_id = BC.commented_on
JOIN
    REACTS_WITH RW ON BC.comment_id = RW.user_id
WHERE
    BC.comment_rating > 0
GROUP BY
    P.podcast_id, P.podcast_title
HAVING
    (COUNT(DISTINCT RW.reaction_id) / COUNT(DISTINCT BC.comment_id)) * 100 > 60
    AND COUNT(DISTINCT BC.comment_id) > 50;

Да се групираат песните/албумите/подкастите според потеклото на мнозинството слушатели

WITH CreationListenerOrigin AS (
    SELECT
        C.creation_id,
        L.listener_id,
        MAX(L.listener_origin) AS majority_origin
    FROM
        (
            SELECT song_id AS creation_id FROM SONG
            UNION
            SELECT album_id AS creation_id FROM ALBUM
            UNION
            SELECT podcast_id AS creation_id FROM PODCAST
        ) C
    JOIN
        LISTENS_TO L ON C.creation_id = L.creation_id
    GROUP BY
        C.creation_id, L.listener_id
)

SELECT
    CLO.creation_id,
    CLO.majority_origin,
    CASE
        WHEN S.song_id IS NOT NULL THEN 'SONG'
        WHEN A.album_id IS NOT NULL THEN 'ALBUM'
        WHEN P.podcast_id IS NOT NULL THEN 'PODCAST'
    END AS creation_type
FROM
    CreationListenerOrigin CLO
LEFT JOIN
    SONG S ON CLO.creation_id = S.song_id
LEFT JOIN
    ALBUM A ON CLO.creation_id = A.album_id
LEFT JOIN
    PODCAST P ON CLO.creation_id = P.podcast_id
ORDER BY
    CLO.creation_id;

Да се најдат жанровите кои најмногу се слушани во определен период од годината

SELECT
    G.genre_id,
    G.genre_name,
    COUNT(*) AS listen_count
FROM
    LISTENS_TO L
JOIN
    SONG S ON L.creation_id = S.song_id
JOIN
    GENRE G ON S.genre_id = G.genre_id
WHERE
    EXTRACT(MONTH FROM L.listens_timestamp) = <месец> AND EXTRACT(YEAR FROM L.listens_timestamp) = <година>
GROUP BY
    G.genre_id, G.genre_name
ORDER BY
    listen_count DESC;

Прикажи ги сите песни кои имаат просечен рејтинг поголем од 4.5 и се класификуваат како 'поп' или 'рок', а имаат најмалку 100000 преслушувања.

SELECT song_name, AVG(rating) AS average_rating, COUNT(streams) AS number_of_streams
FROM songs
JOIN ratings ON songs.song_id = ratings.song_id
JOIN classifications ON songs.song_id = classifications.song_id
WHERE classifications.genre IN ('pop', 'rock')
GROUP BY song_name
HAVING average_rating > 4.5 AND number_of_streams > 100000;

Подкасти кои имаат најмалку 50 епизоди и се класификуваат како образовни

SELECT p.podcast_title, COUNT(e.episode_id) AS total_episodes
FROM PODCAST p
JOIN EPISODE e ON p.podcast_id = e.podcast_id
JOIN CATEGORY c ON p.category_id = c.category_id
WHERE c.category_name = 'Education'
GROUP BY p.podcast_id, p.podcast_title
HAVING COUNT(e.episode_id) > 50;

Концерти кои ќе се одржат во Лондон и ќе вклучуваат информации за изведувачите, времетраењето на настанот и бројот на преслушувања на нивните песни:

SELECT 
    c.concert_name, 
    c.concert_location, 
    c.concert_timeDate, 
    COUNT(l.song_id) AS total_listens,
    a.information AS artist_information
FROM CONCERT c
JOIN BUZZEVENT b ON c.event_id = b.event_id
JOIN ARTIST a ON b.user_id = a.user_id
JOIN SONG s ON a.user_id = s.created_by
JOIN LISTENS l ON s.song_id = l.song_id
WHERE c.concert_location = 'London'
GROUP BY c.concert_name, c.concert_location, c.concert_timeDate, a.information
ORDER BY c.concert_timeDate;

Да се прикажат информациите за изведувачите, вклучувајќи ги нивните имиња, бројот на песни кои ги креирале и просечниот рејтинг на нивните песни:

SELECT 
    a.user_id,
    a.information AS artist_name,
    COUNT(s.song_id) AS total_songs,
    AVG(r.rating) AS average_rating
FROM ARTIST a
LEFT JOIN SONG s ON a.user_id = s.created_by
LEFT JOIN RATINGS r ON s.song_id = r.song_id
GROUP BY a.user_id, a.information
ORDER BY average_rating DESC;

Да се излистаат најдодаваните песни според регионот на корисниците,и да ги редоследува првите 10 најдодавани песни за секој регион. Песните според бројот на плејлисти во кои се наоѓаат, во опаѓачки редослед.

SELECT s.song_title, COUNT(*) AS total_playlists, u.user_region
FROM SONG s
JOIN PLAYLIST_SONG ps ON s.song_id = ps.song_id
JOIN PLAYLIST p ON ps.playlist_id = p.playlist_id
JOIN LISTENER l ON p.created_by = l.user_id
JOIN USER u ON l.user_id = u.user_id
GROUP BY s.song_id, s.song_title, u.user_region
ORDER BY u.user_region, total_playlists DESC
LIMIT 10;
Last modified 3 months ago Last modified on 02/14/24 13:53:10
Note: See TracWiki for help on using the wiki.