统计函数与分组 |
函数名 | 意思 | 功能 |
---|---|---|
count | 计数 | 计算一张表的记录个数/计算一列中值的个数 |
min | 最小 | 求一列值的最大值 |
max | 最大 | 求一列值的最大值 |
sum | 总和 | 计算一列中值的总和【数值型】 |
avg | 平均值 | 计算一列中值的平均值【数值型】 |
group by | 根据…分组 | |
order by | 根据…排序 | |
having | 有 |
查询语句
select founction(col_name) from table_name where condition group by col_name having condition order by col_name1[asc][desc], col_name2[asc][desc], col_nameN[asc][desc]; | 某个函数名 来自那个表 满足的基本条件,(在)…情况下 分组的条件 having与group by结合起来使用 根据…排序 asc升序 desc降序 不写,默认升序 |
---|
t_reader表里面的数据
编号 reader_id | 名字 reader_name | 性别 reader_sex | 生日 reader_birhday | 还书总量 reader_borrowtotal |
---|---|---|---|---|
1001 | 小一 | 男 | 2001/2/1 | 1 |
1002 | 小二 | 男 | 2002/2/2 | 2 |
1003 | 小三 | 女 | 2003/2/3 | 3 |
1004 | 小四 | 女 | 2004/2/4 | 4 |
1005 | 小五 | 女 | 2005/2/5 | 5 |
获取方法
curdate():显示当前日期 |
---|
year(reader_birhday):获取日期类型字段里的年 |
avg(year(curdate())-year(reader_birhday)):平均年龄 |
max(year(curdate())-year(reader_birhday)):最大年龄 |
min(year(curdate())-year(reader_birhday)):最小年龄 |
count(reader_id):得到读者数量 |
实例操作 |
---|
select avg(year(curdate())-year(reader_birhday))as 平均年龄, min(year(curdate()-year(reader_birhday)) as 最小年龄, max(year(curdate()-year(reader_birhday)) as 最大年龄, count(reader_id) as 读者人数 from t_reader; |
输出结果
平均年龄 | 最小年龄 | 最大年龄 | 读者数量 |
---|---|---|---|
18 | 16 | 21 | 5 |
操作 |
---|
分别得出根据男女的平均年龄,并按降序排列 |
order by avg(year(curdate)-year(reader_birhday) desc:降序排列 |
order by 1:指的是select语句后的第一个字段 |
完整实例操作 |
select avg(year(curdate()-year(reader_birhday)) as 平均年龄,reader_sex from t_reader group by reader_sex order by 1 desc; |
结果
平均年龄 | reader_sex |
---|---|
19.5 | 男 |
17 | 女 |
实例
t_return_record还书记录表
还书编号 return_id | 借书编号 borrow_id | 还书日期 return_date | 书籍编号 isbn | 借书日期 borrow_date |
---|---|---|---|---|
101 | 1001 | 2021/5/2 | 11 | 2021/5/1 |
102 | 1002 | 2021/5/3 | 22 | 2021/5/1 |
103 | 1003 | 2021/5/4 | 33 | 2021/5/1 |
104 | 1004 | 2021/5/5 | 44 | 2021/5/1 |
105 | 1005 | 2021/5/2 | 55 | 2021/5/1 |
106 | 1006 | 2021/5/3 | 66 | 2021/5/1 |
显示还书数量大于2的记录,并且按还书的数量升序排列
count(*)>=2 | 借书大于2的 |
---|---|
group by day(return_date) | 每天 |
gcount(*) asc | 升序【可不写,默认升序】 |
实例语句为 [注意数值不要引号] |
---|
select count(* ) as还书总量,return_date from t_return_record group by day(return_date) having count(*)>=2 order by 1; |
输出
还书总量 | return_date |
---|---|
2 | 2021/5/2 |
2 | 2021/5/3 |