数据库 - 与聚合函数和GROUP BY 子句有关的常见错误

本文介绍了SQL中与聚合函数和GROUP BY子句相关的四个常见错误:1) 在SELECT子句中不应包含非聚合键列;2) GROUP BY子句不应使用列别名;3) GROUP BY结果的顺序是随机的,需要在SELECT语句中明确排序;4) 聚合函数应与HAVING子句配合使用,而不是WHERE子句。
摘要由CSDN通过智能技术生成

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子句时&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值