SQL聚合函数、group by&having、limit

聚合函数

示例:某user_profile表如下:

iddevice_idgenderageuniversitygpa
12234male21北京大学3.2
22235maleNULL复旦大学3.8
32236female20复旦大学3.5

查找复旦大学学生gpa最高值

select max(gpa)
from user_profile
where university='复旦大学'

类似的用法:

  • AVG() 返回某列的均值
  • COUNT() 返回某列的行数
  • MAX() 返回某列的最大值
  • MIN() 返回某列的最小值
  • SUM() 返回某列的和

注意聚合函数都会忽略列中的NULL值,但是COUNT(*)也就是统计全部数据的行数时,不会忽略NULL值 

在一些聚集运算中,容易出现结果为非整数的情况,这时候如果想要限定结果返回的小数位数就可以使用SQL中内置的round函数,语法格式为round(value,n),其中 value代表想要限制小数位数的字段,n代表想要限制的小数位数。

下列语句就代表求gpa列的均值,并保留一位小数。

select round(avg(gpa),1) as avg_gpa

 Group by

SELECT university,avg(gpa) AS avg_gpa

FROM user_profile

Group By university

输出:

示范的SELECT 语句指定了两个列:university为用户的学校, avg(gpa)为计算字段,代表平均gpa。 GROUP BY 子句指示SQL按university分组分别计算每个学校的平均gpa情况,从输出中可以看到,结果返回了每个大学的平均gpa数值。

在使用Group by时,有一些事项需要注意:

1. GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套, 更细致地进行数据分组。

2. 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句 中同时给出。

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

4. GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。

 Having

用 GROUP BY 分组数据后,想要过滤数据不能使用where,要使用专门的having语句(过滤出平均gpa大于3.5的学校)   

having 条件代码

SELECT university,avg(gpa) AS avg_gpa
FROM user_profile
Group By university
Having avg_gpa>3.5

Order by

分组查询结果也支持排序功能,所需要用到的语句是Order By(根据gpa的平均值升序排列)

order by 字段名 asc|desc (升序|降序)

SELECT university,avg(gpa) AS avg_gpa
FROM user_profile
Group By university
Order by avg_gpa

limit

分页查询employees表,每5行一页,返回第2页的数据

SELECT *
FROM employees
LIMIT 5,5

limit 语句结构: limit x,y 

x:从第几条记录开始返回(第一条记录序号为0,默认为0)

Y :返回几条记录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值