SQL之四

                 SQL之四

1. 组合聚集函数
举例:select语句可根据需要包含多个聚集函数。
Select count(*) as num_items,
min(prod_price) as price_min,
max(prod_price) as price_max,
avg(prod_price) as price_avg
from Products;
注:distinct不能用于count(*),只能用于指定列名,不能用于计算或者表达式。
2. 分组函数
涉及两个新select语句子句:group by子句和having子句。
(1) 分组是使用select语句的group by子句建立的。
理解分组下面举个列子:
Select vend_id,count(*) as num_prods from Products group by vend_id;
上面的select语句指定了两个列:vend_id包含产品供应商的ID,num_prods为计算字段。group by子句指示DBMS按vend_id排序并分组数据。这就会对每个vend_id而不是整个表计算num_prods一次。
因为使用了group by,就不必指定要计算和估值每个组了,系统会自动完成。group by子句指示DBMS分组数据,然后对每个组而不是整个结果集进行聚集。
(2) group by子句需要注意的点?
Group by子句可以包含任意数目的列,因而可以对分组进行嵌套,更细致地进行数据分组。
如果在group by子句中嵌套了分组数据将在最后指定的分组上进行汇总换句话说,在建立分组时,指定的所有列都一起计算(所以不能从个别的列取回数据)。
Group by子句中列出的每一列都必须是检索列或有效的表达式。如果select中使用表达式。不能使用别名。
大多数sql实现不允许group by列带有长度可变的数据类型(如文本或备注字段)
除聚集计算语句外,select语句中的每一列都必须在group by子句中给出。
如果分组列中具有null值的行,则null将作为一个分组返回。如果列中有多行的null值,他们将分为一组。
Group by子句必须出现在where子句之后,order by子句之前。
3. 过滤分组
除了能用group by分组数据外,sql还允许过滤分组,规定包括哪些分组,排除哪些分组。这时候不能用where进行过滤,而应该用having过滤。
(1) 为什么不能用where?
这是因为where过滤指定的是行而不是分组,where没有分组的概念。
举例说明:
Select cust_id,count() as orders from Orders group by cust_id having count() >= 2;(这里本来count里面有星号,但是网站显示不出来,在此说明下)
这条select语句的前三行类似于上面的语句。最后一行增加了having子句,它过滤count(*)>= 2 (两个以上订单)的那些分组。
(2) where和having可以同时在一起么?
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以上的分组。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值