SQL1.7 分组数据

1.1 数据分组

使用聚集函数可以汇总数据

eg:

select count(*) as num_prods

from products

where vend_id = 'DLL01'

1.2 创建分组

select vend_id, count(*) as num_prods

from product

group by vend_id;          ---按照vend_id进行分组数据

Group by 子句的一些重要规定

1. group by子句可以保护任意数目的列,因为可以对分组进行嵌套,从而更细致的进行数据分组;

2. 如果在group by 中嵌套了分组,数据将在最后指定的分组上进行汇总。

3. group by 子句中列出的每一列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在select中使用表达式,则必须在group by子句中指定相同的表达式。不能使用别名。

4. 大多数SQL实现不允许Group by 列带有长度可变的数据类型(如文本或备注型字段)

5. 除聚集计算语句外,select语句中的每一列都必须在group by子句中给出。

6. 如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回,如果列中有多行NULL值,它们将分为一组。

7. Group by 子句必须出现在Where子句之后,order by 子句之前

1.3 过滤分组

Having  ---非常类似于WHERE,目前为止所学过所有类型的where子句都可以用HAVING来替代,

                 唯一区别:where过滤行,Having过滤分组

eg:

select cust_id ,count(*) as orders

from Orders

Group by cust_id

Having count(*) >=2;               --过滤是基于分组聚集值,过滤count(*)>=2(两个以上订单)的那些分组

where 是数据分组前进行过滤,having在数据分组后进行过滤,where排除的行不包括在分组中

eg:

select vend_id, count(*) as num_prods

from products

where prod_price >=4

group by vend_id

Having count(*) >=2;           

  --where子句过滤所有prod_price至少为4的行,然后按照vend_id进行分组,having子句过滤计 数为2或2以上的分组

使用having时应结合group by子句,而where子句用于标准的行级过滤。

1.4 分组与排序

使用group by 子句时,应该给出order by 子句,千万不能依赖group by进行排序



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值