SQL sever 基础学习3(聚合与排序)

一.聚合查询

聚合函数含义
count()计算表中的记录数(行数)
sum()计算表中数值列中数值的合计值
avg()计算表中数值列中数据的平均值
max()求出表中任意列中数据的最大值
min()求出表中任意列中数据的最小值

1.count()函数

--count()函数例
select count(*)
    from product;
/* *号表示全部列
count(*)计算时包括了键值为null 的行 */
select count(sale_price)
    from product;
--上述例程中count(sale_price)计算时不计算键值为null的行

2.SUM()函数

--例
select SUM(sale_price)
    from product;
/*
SUM函数在计算含null值的列时会把null值直接排除
*/

3.AVG()函数

--例
select AVG(sale_Price)
    from product;
/*
计算时将null值排除,不参与计算
*/

4.MAX()与MIN()函数

--例
select MAX(sale_price),MIN(sale_price)
    from product;

注:MAX()与MIN()函数原则上可以适用任意数据类型的列

注2:SUM()与AVG()韩式只适用于数据类型的列

5.聚合函数中使用distinct

select count(distinct product_type)
    from product;
--计算出有几种不同的product_type

二. 对表进行分组

1.group by 子句

select <列名1>,<列名2>,<列名3>....
    from <表名>
    group by <列名1>,<列名2>,<列名3>...;

--例1
select product_type, count(*) as '合计'
    from product
    group by product_type;
--例2
select product_type, product_name, count(*) as '合计'
    from product
    group by product_type, product_name;

注:子句的书写顺序

select子句  ->   from子句  ->  where子句  ->  group by子句  ->  having子句  ->  order by子句

注2:包含为null的键值时,也将null作为单独的一组数据

注3:不能把聚合键之外二点列名书写在select子句中

注4:group by 子句中不能使用别名

注5:group by 子句得到的结果顺序是随机的,需要其他子句使其排序。

注6:where子句中不得使用聚合函数,事实上,只有select子句和having子句与order by子句中才可用聚合函数

三.为聚合结果指定条件

1.having子句(指定组的条件)

select <列名1>,<列名2>,<列名3>,...
    from <表名>
    group by <列名1>,<列名2>,<列名3>...
    having <分组对应条件>;

注:having子句必须在group by子句之后

--例
select product_type, count(*)
    from product
    group by product_type
    having count(*)=2;

注:having子句的构成要素:常属,聚合函数,group by 中指定的列名(聚合键)

四.对结果进行排序 order by 子句

select <列名1>,<列名2>,<列名3>...
    from<表名>
    order by <排序基准1>,<排序基准2>,...;

1.升序与降序

select product_id, product_name,sale_price, purchase_price
    from product
    order by sale_peice asc;
--asc 升序
select product_id, product_name,sale_price, purchase_price
    from product
    order by sale_peice desc;
--desc 降序

1.1指定多个排序键

select product_id,product_name,sale_price, product_type
    from product
    order by sale_price asc, product_id desc;

注:null所在的列作为排序键时,null不会参与排序,所以他总是在结果的开头或者结尾出现

注2:不得在排序键order by 子句中使用别名

注3:程序执行子句的顺序

from子句  ->  where子句  ->  group by子句  ->  having子句  ->  select子句  ->  order by子句

1.2 order by子句中可以使用存在于表中的,但不包含在select子句中的列

select product_name, sale_price, product_type
    from product
    order by product_id;

1.3也可以使用列编号(列编号是指select子句中的列按照从左到右的顺序进行排列时所对应的编号,不是创建表时的列编号)

--列名指定
select product_id, product_name, sale_price, product_type
    from product
    order by sale_price desc, product_id asc;
--列编号指定
select product_id, product_name, sale_price, product_type
    from product
    order by 3 desc, 1 asc;
--select子句中列顺序变化导致结果发生变化
select product_id, product_name, regist_date, product_type,sale_price
    from product
    order by 3 desc, 1 asc;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值