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

如何修改SQLite代码实现粉丝分组并计算各组平均值与统计值

问题修复方案

你的SQL代码存在两个核心问题导致分组异常和统计错误,以下是修正后的代码及说明:

关键问题分析

  1. 分组逻辑错误:GROUP BY 'Distribution of Fans'中的单引号会将该内容识别为字符串常量,导致所有数据被归为同一组,最终只显示一个分组结果。SQLite支持直接按列别名分组,需去掉单引号,或直接使用CASE表达式本身作为分组依据。
  2. 统计计数错误:COUNT(R.Useful = 1)这类写法无法正确统计符合条件的记录数——R.Useful = 1在SQLite中返回0或1,而COUNT()会统计所有非NULL值(包括0),结果等同于总记录数。需改用SUM()累加符合条件的1值,或结合CASE与COUNT()实现精准统计。

修正后的代码

SELECT 
    CASE
        WHEN U.Fans > 0 AND U.Fans <= 20 THEN '0-20 Fans'
        WHEN U.Fans > 20 AND U.Fans <= 40 THEN '21-40 Fans'
        WHEN U.Fans > 40 AND U.Fans <= 60 THEN '41-60 Fans'
        WHEN U.Fans > 60 AND U.Fans <= 80 THEN '61-80 Fans'
        ELSE '80+ Fans' -- 处理粉丝数超出区间或<=0的情况,避免分组为NULL
    END AS "Distribution of Fans",
    AVG(U.Review_Count) AS Average_Review_Count,
    AVG(U.Average_Stars) AS Average_of_Average_Stars,
    SUM(CASE WHEN R.Useful = 1 THEN 1 ELSE 0 END) AS Useful_Count,
    SUM(CASE WHEN R.Funny = 1 THEN 1 ELSE 0 END) AS Funny_Count,
    SUM(CASE WHEN R.Cool = 1 THEN 1 ELSE 0 END) AS Cool_Count
FROM User AS U
INNER JOIN Review AS R ON U.Id = R.User_Id
GROUP BY "Distribution of Fans" -- 用双引号包裹别名(SQLite中双引号用于标识符),或直接使用CASE表达式

额外说明

  • 若SQLite配置允许,也可将GROUP BY的内容替换为完整的CASE表达式,效果与按别名分组一致。
  • 新增的ELSE '80+ Fans'能避免粉丝数不在指定区间的用户分组显示为NULL,让统计结果更完整。
  • SUM(CASE...)的写法可精准统计每个字段等于1的记录数,替代原错误的COUNT逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:33:09