一、教程 2. SQL语言(distinct、聚合函数、having和where)

本文讲解了SQL中的DISTINCT关键字在不同情况下的行为,强调了WHERE与HAVING在数据筛选中的作用差异,以及聚合函数的使用限制。通过实例说明WHERE用于预选行,HAVING则用于过滤分组后的结果。
摘要由CSDN通过智能技术生成

标题2.5章节 查询表

1.在一些数据库系统中,包括旧版本的PostgreSQL, DISTINCT的实现会自动对行进行排序,因此ORDER BY是不必要的。 但是这不是SQL标准所要求的,而且当前的PostgreSQL不保证DISTINCT会导致行被排序。

标题2.7. 聚合函数

1.where子句不能使用聚合,例如 SELECT city FROM weather WHERE temp_lo = max(temp_lo); --错误

因为WHERE子句确定了哪些行将包含在聚合计算中。从而得到聚合的结果。 通常情况下,可以使用子查询,SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather); --正确

子查询是一个独立的计算,它计算自己的聚合与外部查询中发生的事情分开。

2.HAVING过滤这些分组的行:SELECT city, max(temp_lo) FROM weather GROUP BY city HAVING max(temp_lo) < 40;

3.WHERE和HAVING之间的根本区别在于:WHERE在计算组和聚合之前选择输入行(因此,它控制哪些行进入聚合计算),而HAVING在计算组和聚合之后选择组行。因此,该WHERE子句不得包含聚合函数;尝试使用聚合来确定哪些行将作为聚合的输入是没有意义的。

另一方面,HAVING子句总是包含聚合函数。(严格来说,你可以写一个HAVING不使用聚合的子句,但它很少有用。在这个阶段可以更有效地使用相同的条件WHERE。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值