WITH                -- 使用CTE分模块计算输出结果。(这道题的本质是连接表后,进行列转行的操作)
zongbiao AS (               -- 将所有要用到的表连接,并输出所有要用的字段
    SELECT
        dan.record_id               -- 借阅单id
        ,dan.book_id                -- 书籍id
        ,dan.branch_id              -- 图书馆id
        ,shu.book_title             -- 书名(其实可以不取,后续会说原因)
        ,dan.borrow_date            -- 借阅日期
        ,guan.region                -- 图书馆所属区域
        ,DATE_FORMAT(borrow_date,'%Y-%m') AS yue            -- 转换借阅日期格式(年月日-年月),后续的计算都是以月维度进行
    FROM BorrowRecords AS dan       -- 以借阅表为主表
    INNER JOIN Books AS shu         -- 连接书籍表
        ON (dan.book_id = shu.book_id)
    INNER JOIN Branches AS guan     -- 连接图书馆表
        ON (dan.branch_id = guan.branch_id)
),

yuejieyue AS (              -- 计算每种书籍在这三个月的借阅数
    SELECT 
        book_id
        ,SUM(CASE WHEN yue = '2023-02' THEN 1 ELSE 0 END) AS feb_2023_borrows   -- 在这一列中,借阅月为2023-02的书籍,记为1,不是这个月的记为0,最后按照书籍id分组,再统计每一本书在这个月的借阅总数
        ,SUM(CASE WHEN yue = '2024-02' THEN 1 ELSE 0 END) AS feb_2024_borrows   -- 同上
        ,SUM(CASE WHEN yue = '2024-01' THEN 1 ELSE 0 END) AS jan_2024_borrows   -- 同上
    FROM zongbiao
    GROUP BY book_id
),

tonghuanbi AS (             -- 计算每一本书的同环比,所需数据在上一步已得出,仅需套同环比公式即可,题目只要求输出绝对值,所以不用算百分比(否则会更繁琐)
    SELECT 
        book_id
        ,feb_2024_borrows - feb_2023_borrows AS yoy_delta   -- 同比=本期-去年同期
        ,feb_2024_borrows - jan_2024_borrows AS mom_delta   -- 环比=本期-上期
    FROM yuejieyue
),

quzhanbi AS (               -- 计算每一本书2023年的借阅区域占比,公式为:书籍2023年目标区域借阅数/书籍2023年所有区域借阅数*100,注意处理小数点后的位数
    SELECT
        book_id
        ,ROUND(SUM(CASE WHEN region = '华北' THEN 1 ELSE 0 END) * 100  / COUNT(*),2) AS north_pct_2023
        ,ROUND(SUM(CASE WHEN region = '华南' THEN 1 ELSE 0 END) * 100  / COUNT(*),2) AS south_pct_2023
        ,ROUND(SUM(CASE WHEN region = '华东' THEN 1 ELSE 0 END) * 100  / COUNT(*),2) AS east_pct_2023
    FROM zongbiao
    WHERE DATE(borrow_date) >= '2023-01-01'
      AND DATE(borrow_date) <= '2023-12-31'
    GROUP BY book_id
)

SELECT              -- 最后把所有计算向左连接书籍表(因为书籍3借阅数为0,用内连接会不显示书籍3)
    b.book_id,
    b.book_title,
    COALESCE(y.feb_2023_borrows,0) AS feb_2023_borrows, -- 注意处理zone值
    COALESCE(y.feb_2024_borrows,0) AS feb_2024_borrows,
    COALESCE(y.jan_2024_borrows,0) AS jan_2024_borrows,
    COALESCE(t.yoy_delta,0) AS yoy_delta,
    COALESCE(t.mom_delta,0) AS mom_delta,
    COALESCE(q.north_pct_2023,0) AS north_pct_2023,
    COALESCE(q.south_pct_2023,0) AS south_pct_2023,
    COALESCE(q.east_pct_2023,0) AS east_pct_2023
FROM Books AS b
LEFT JOIN yuejieyue AS y
    ON (b.book_id = y.book_id)
LEFT JOIN tonghuanbi AS t
    ON (b.book_id = t.book_id)
LEFT JOIN quzhanbi AS q
    ON (b.book_id = q.book_id)