SQL使用SUM和GROUP BY分组统计得到全局总和而非分组和问题排查
错误原因
编写的SQL使用隐式交叉连接未指定两表关联条件,生成笛卡尔积后统计结果出错:
- 写法
from book,buyer缺少book.title = buyer.title的关联条件,会将book表的4条数据与buyer表的5条数据全量两两拼接,生成20条临时数据,在此基础上分组求和的结果自然不符合预期。
修复方案
推荐使用规范的显式JOIN写法,避免漏写关联条件的问题:
SELECT b.name, SUM(k.price) AS sum_price FROM buyer b INNER JOIN book k ON b.title = k.title GROUP BY b.name;
如果要沿用隐式连接的写法,补充关联条件即可:
SELECT name, SUM(price) sum_price FROM book,buyer WHERE book.title = buyer.title GROUP BY name;
运行结果
针对提供的测试数据,执行修复后的语句输出结果如下:
| name | sum_price |
|---|---|
| kim | 300 |
| ca | 100 |
| yan | 400 |
和每个用户购书总金额的统计需求完全匹配。
内容的提问来源于stack exchange,提问作者ydfw
相关产品推荐
相关产品推荐

