You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询按评论与评分总量排序的Top7用户及评论书籍总页数

问题修正与正确SQL查询

你的原查询存在几个关键问题,导致无法满足需求:

  1. 统计逻辑错误:用SUM(reviews.reviews_id)统计评论数是错误的——字段名写错(应为review_id),且统计数量需用COUNT()而非SUM();另外需求中的“给出评分总数”是指评分的次数,不是评分的数值总和,原查询用SUM(ratings.rating)求的是评分总分,不符合要求。
  2. 连接方式问题:使用INNER JOIN会过滤掉只写评论没评分、或只评分没评论的用户,这些用户无法进入排名。
  3. 页数统计重复:若用户对同一本书多次评论,原查询会重复计算该书籍的页数,需去重后求和。

正确查询语句(兼容多数数据库)

SELECT
    username,
    SUM(total_reviews) AS total_reviews,
    SUM(total_rating_count) AS total_rating_count,
    SUM(total_book_pages) AS total_book_pages
FROM
    (
        -- 统计用户评论数及评论书籍的总页数(去重避免重复计算)
        SELECT
            username,
            COUNT(review_id) AS total_reviews,
            0 AS total_rating_count,
            SUM(DISTINCT b.num_pages) AS total_book_pages
        FROM Reviews r
        LEFT JOIN Books b ON r.book_id = b.book_id
        GROUP BY username
        
        UNION ALL
        
        -- 统计用户评分次数
        SELECT
            username,
            0 AS total_reviews,
            COUNT(rating_id) AS total_rating_count,
            0 AS total_book_pages
        FROM Ratings
        GROUP BY username
    ) user_stats
GROUP BY username
ORDER BY (total_reviews + total_rating_count) DESC
LIMIT 7;

说明

  • 两个子查询分别统计用户的评论数据和评分数据,用UNION ALL合并后再按用户分组求和,确保不遗漏任何用户。
  • SUM(DISTINCT b.num_pages)确保同一本书的页数只计算一次,符合“所评论书籍的总页数”的需求。
  • 最终按「评论数+评分次数」的总和降序排序,取前7位用户。

内容的提问来源于stack exchange,提问作者SoapBubble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:06:19