文章目录
1. 前言
GROUP BY子句和聚合函数经常被使用,但书写SQL时却很容易出错,以下总结了4个常见的错误。
2. 常见错误1-在SELECT子句中书写了多余的列
在使用COUNT这样的聚合函数时,SELECT子句中的元素有严格的限制,在使用聚合函数时,
SELECT子句中只能存在以下三种元素:
- 常数
- 聚合函数
- 聚合键(就是GROUP BY指定的列名)
这里经常出现的错误就是把聚合键之外的列名书写在SELECT子句之中。
不支持这种语法的原因,就是通过某个聚合键将表分组之后,结果中的一行数据就代表一组。因为聚合键和其他列并不一定是一一对应的,假设进货单价是200元的商品有“T恤“和“菜刀”两种,但是200元这一行该应对哪个商品名呢?
3.常见错误2-在GROUP BY子句中写了列的别名
SELECT子句中的列名可以通过AS关键词来制定别名。但是,在GROUP BY子句中是不能使用别名的。
SELECT product_type AS pt, COUNT(*)
FROM Product
GROUP BY pt;
(虽然这样写在PostgreSQL和MySQL中不会报错,但这样的写法在其他DBMS中并不是通用的。)
这个错误的原因是因为SQL在DBMS内部执行顺序所造成的的-SELECT子句是在GROUP BY子句之后执行。在执行GROUP BY子句时&#