SQL如何利用聚合函数生成业务分析指标_KPI计算基础教程

KPI查询常见错误包括:GROUP BY后SELECT列必须为分组列或聚合列;COUNT(*)与COUNT(字段)对NULL处理不同;窗口函数如LAG可安全实现同比/环比;WHERE过滤行级数据,HAVING过滤分组结果。GROUP BY 后 SELECT 列必须是聚合列或分组列这是写 KPI 查询时最常报错的地方,比如 SELECT user_id, COUNT(*) FROM orders GROUP BY status 会直接报错------user_id 既没参与 GROUP BY,也没被聚合函数包裹。数据库不知道该取哪一行的 user_id。正确做法只有两种:把 user_id 加进 GROUP BY(适合分析每个用户在各状态下的订单数)用聚合函数包裹,比如 MAX(user_id) 或 ANY_VALUE(user_id)(MySQL 5.7+),但得清楚语义:你并不真需要具体哪个 user_id,只是占位或辅助去重注意 ANY_VALUE() 不是标准 SQL,PostgreSQL 用 MIN()/MAX() 替代更稳妥;SQL Server 要靠子查询或窗口函数绕开。COUNT(*) vs COUNT(字段) 的语义差异直接影响 KPI 分母算"下单用户数"还是"支付成功用户数",差一个 IS NOT NULL 就可能翻车。比如 COUNT(user_id) 会自动跳过 NULL 值,而 COUNT(*) 统计所有行。常见陷阱:用 COUNT(create_time) 算日活,但某些测试订单 create_time 是 NULL,结果漏掉这批数据想统计"有手机号的用户数",写了 COUNT(phone),结果发现部分老数据存的是空字符串 '',它不等于 NULL,照样被计入更安全的写法是显式过滤:COUNT(CASE WHEN phone != '' AND phone IS NOT NULL THEN 1 END)。用窗口函数补全"同比/环比"这类跨行指标单纯 GROUP BY 只能算静态聚合,但 KPI 常要"本月销售额 / 上月销售额"。这时候硬写两个子查询 JOIN 很容易漏月、对不齐维度。 唱鸭 音乐创作全流程的AI自动作曲工具,集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

相关推荐
这个DBA有点耶3 小时前
2026年分布式数据库有哪些主流选择?先评估这5个维度再决定
数据库·分布式·dba
用户7783366132115 小时前
用 React Hook 封装搜索数据:useSerp 的防抖、缓存与错误处理
python·api
这个DBA有点耶6 小时前
从MySQL 5.7到8.0:JSON查询性能差在哪?虚拟列索引vs多值索引怎么选
数据库·mysql·架构
胡写代码6 小时前
数据库审计字段,别再每张表各写一套了——我统一成这 6 个字段
数据库
65岁退休Coder9 小时前
LangGraph v1.2.9 节点容错策略 & 流式输出 & 持久化记忆管理
后端·python·langchain
SelectDB10 小时前
为什么 JSON 正在成为分析数据库新的竞争点?
数据库·json·agent
ClouGence11 小时前
开源数据库管理工具 CloudDM 4.2.0 发布,新增 GoldenDB、KingbaseES 等数据源
数据库·dba·devops
发霉的馒头11 小时前
ORA-00845: MEMORY_TARGET not supported on this system的解决方法
数据库
ikun_文11 小时前
Django框架路由Router的使用
python·pycharm·django
IvanCodes11 小时前
Python 基础语法(二):字符串与常用操作
python