SQL之四
来源:互联网 发布:黑河学院教务网络管理 编辑:程序博客网 时间:2024/06/18 06:04
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以上的分组。
- SQL 学习心得之四
- SQL 学习之四
- SQL之四
- SQL 进阶学习之四
- PL/SQL之四 触发器
- 学习PL/SQL之四:集合
- SQL常用函数之四 REVERSE()
- MyBatis学习 之 四、动态SQL语句
- MyBatis学习 之四、动态SQL语句
- 黑马程序员之SQL语句小结四
- ORACLE SQL性能优化之四
- SQL笔记四之事物处理机制
- ORACLE PL/SQL编程详解之四
- SQL基础(四)之查询语句
- MyBatis学习 之 四、动态SQL语句
- Spark SQL之案例实战(四)
- Mybatis学习笔记之四:动态SQL
- pl/sql教程之四:pl/sql 游标
- Mybatis批量新增
- Response.getWriter().writer()和Response.writer()的区别
- 【JZOJ4934】 【NOIP2017GDKOI模拟1.12】a
- mysql交互式连接&非交互式连接
- java中的几个集合类
- SQL之四
- Android多线程崩溃问题
- 高性能网站架构之负载均衡 Nginx+tomcat+redis实现tomcat集群
- lua 说明self,点号或冒号的关系
- 17 - 03 - 23 图解HTTP(27)
- Tensorflow | win10中安装tensorflow-0.12.1 (0.12.1以后的版本安装均适用)
- Python学习(四)——filter函数
- c:forEach varStatus属性
- windows上编译ffmpeg