题解 | 统计借阅量

统计借阅量

https://www.nowcoder.com/practice/280ed56ab3ee49a4b2a4595d38e1d565

WITH feb_23 AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS feb_2023_borrows
    FROM BorrowRecords b
    WHERE YEAR(b.borrow_date) = 2023
        AND MONTH(b.borrow_date) = 2
    GROUP BY
        b.book_id
),
feb_24 AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS feb_2024_borrows
    FROM BorrowRecords b
    WHERE YEAR(b.borrow_date) = 2024
        AND MONTH(b.borrow_date) = 2
    GROUP BY
        b.book_id
),
jan_24 AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS jan_2024_borrows
    FROM BorrowRecords b
    WHERE YEAR(b.borrow_date) = 2024
        AND MONTH(b.borrow_date) = 1
    GROUP BY
        b.book_id
),
north AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS north_2023
    FROM BorrowRecords b
    LEFT JOIN Branches br ON b.branch_id = br.branch_id
    WHERE YEAR(borrow_date) = 2023
        AND br.region = '华北'
    GROUP BY b.book_id
),
south AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS south_2023
    FROM BorrowRecords b
    LEFT JOIN Branches br ON b.branch_id = br.branch_id
    WHERE YEAR(borrow_date) = 2023
        AND br.region = '华南'
    GROUP BY b.book_id
),
east AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS east_2023
    FROM BorrowRecords b
    LEFT JOIN Branches br ON b.branch_id = br.branch_id
    WHERE YEAR(borrow_date) = 2023
        AND br.region = '华东'
    GROUP BY b.book_id    
),
total AS(
    SELECT
        b.book_id,
        COUNT(b.record_id) AS total_2023
    FROM BorrowRecords b
    LEFT JOIN Branches br ON b.branch_id = br.branch_id
    WHERE YEAR(borrow_date) = 2023
    GROUP BY b.book_id   
)
SELECT DISTINCT
    b.book_id,
    b.book_title,
    COALESCE(feb_23.feb_2023_borrows, 0) AS feb_2023_borrows,
    COALESCE(feb_24.feb_2024_borrows, 0) AS feb_2024_borrows,
    COALESCE(jan_24.jan_2024_borrows, 0) AS jan_2024_borrows,
    COALESCE(feb_24.feb_2024_borrows, 0) - COALESCE(feb_23.feb_2023_borrows, 0) AS yoy_delta,
    COALESCE(feb_24.feb_2024_borrows, 0) - COALESCE(jan_24.jan_2024_borrows, 0) AS mom_delta,
    ROUND(IFNULL(
        100 * COALESCE(north.north_2023, 0) / NULLIF(COALESCE(total.total_2023, 0), 0)
        ,0)
        , 2) AS north_pct_2023,
    ROUND(
        IFNULL(100 * COALESCE(south.south_2023, 0) / NULLIF(COALESCE(total.total_2023, 0), 0),0)
    , 2) AS south_pct_2023,
    ROUND(
        IFNULL(100 * COALESCE(east.east_2023, 0) / NULLIF(COALESCE(total.total_2023, 0), 0),0)
        , 2) AS east_pct_2023
FROM Books b
LEFT JOIN feb_23 ON b.book_id = feb_23.book_id
LEFT JOIN feb_24 ON b.book_id = feb_24.book_id
LEFT JOIN jan_24 ON b.book_id = jan_24.book_id
LEFT JOIN north ON b.book_id = north.book_id
LEFT JOIN south ON b.book_id = south.book_id
LEFT JOIN east ON b.book_id = east.book_id
LEFT JOIN total ON b.book_id = total.book_id
ORDER BY
    b.book_id ASC,
    b.book_title ASC;

粪题一道

没必要刷

全部评论

相关推荐

递归到脑子变傻:杭州还有上位机用VB的,实在没绷住
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务