分组数据GROUP BY 过滤分组HAVING 排序检索ORDER BY 说明和使用

分组数据GROUP BY

说明:简单来说,分组数据GROUP BY的用法是根据表中的数据对某一个列相同的数据进行划分为一组。此链接为创建表和插入数据代码

举个简单的例子:

将商品编号相同的数据进行划分。

select order_id as 商品编号 ,COUNT(*) as 数量
from order_list
GROUP BY order_id--对商品编号进行分组
使用规定
  1. GROUP BY子句中可以包含任意数目的列。
  2. 如果GROUP BY子句中嵌套了分组,数据将在最后规定的分组中进行汇总。指定的列将在一起计算,不能从个别的列中取回数据。
  3. GROUP BY 子句中的列出的每个数据都必须是检索列或有效地表达式,不能是聚集函数。
  4. 在GROUP BY子句中不能使用别名。
  5. 如果分组列中具有NULL值,则NULL将作为一个分组返回。若有多个NULL值,它们将归为一组返回。
  6. GROUP BY子句必须出现-----WHERE之后,ORDER BY子句之前。
  7. select 语句中的每个列都必须在GROUP BY子句中给出。

过滤分组HAVING

说明:当GROUP BY-----分组后,使用HAVING的条件对分组后的数据进行筛选。作用于WHERE相似,区别在于WHERE在数据进行-----分组前进行过滤,HAVING在数据-----分组后对数据进行过滤;HAVING支持所有WHERE的操作符;WHERE对分组后的数据不起作用。

例子:
select order_id as 商品编号 ,SUM(order_price * order_count) as 总价
from order_list
WHERE order_id=3333
GROUP BY order_id
--HAVING  order_id=3333--作用于where一样,但必须位于group by 之后
HAVING SUM(order_price * order_count)>20
--where SUM(order_price * order_count)>20错误写法

排序检索 ORDER BY

说明:数据库中的数据一般都是随机的,使用ORDER BY 可以让数据按照一定的格式进行排序。

排序方式:

1.默认情况下数字从小到大,数字从a—z。

select order_name as 名字 from  order_list
order by order_name

2.默认情况下排序为升序(ASC),DESC为降序。

select order_id as 商品编号,order_price as 价格 from  order_list
order by order_price desc--默认情况下为降序

3.当有多列排序,先对第一个列进行排序,若第一个列排序后有相同的值,第二列只会对相同的数据进行二次排序。若降序单独附加,只对附加的列起作用,另一个仍然是升序。

select order_name as 名字,order_price as价格 from  order_list
order by order_name,order_price desc --先对编号进行排序,然后在对名字相同的数据进行二次排序。desc只对价格起作用

4.使用非检索列也是可以的。

select order_price as价格 from  order_list--检索列中不包括order_count
order by order_count desc

分组和排序GROUP BY和ORDER BY

说明:一般使用GROUP BY子句时,应该给出ORDER BY子句,ORDER BY位于GROUP BY和HAVING之后。

GROUP BYORDER BY
排序产生的输出分组行。输出顺序不是排序的顺序
任意列都可以只可能使用选择列或表达式,而且必须使用每个选择列的表达式。
不一定需要如果与聚集函数一起使用列(表达式),则必须使用。

聚集函数的介绍与使用

例子
select order_id as 商品编号 ,SUM(order_price * order_count) as 总价,order_date as 日期
from order_list
GROUP BY order_id,order_date
HAVING SUM(order_price * order_count)>10
ORDER BY  order_date--按照日期进行排序
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值