SQL常见问题整理(二)

5.汇总数据

(1)基本的汇总技巧

统计行数:count()
最大值或最小值:max()、min()
总和与平均值:sum()、avg()
去除重复:distinct()
(2)查找与最小值和最大值相关的值
使用两个语句和一个用户定义的变量:
set @max=(select max(pop) from states); select pop as ‘hightest population’,name from states where pop=@max;
使用子查询:
select pop as ‘highest population’,name from states where pop =(select max(pop) from states);
使用表连接:
create tempoprary table tmp select max(pop) as maxpop from states; select states.* from states inner join tmp on states.pop=tmp.maxpop
(3)按子群汇总
使用group by 子句将行分成小组
(4)仅选择具有特征的值
having子句
(5)通过计数来确定值是否唯一
结合使用having和count()
找重复值:select trav_date,count(trav_date) from driver_log group by trav_date having count(trav_date)>1
(6)按表达式结果分组
在group by子句中,使用表达式对结果值进行分类
(7)查找最小或最大的汇总值
在语句中添加limit子句
无重复值:按照总数从大到小排序,确保sum()值最大的行排在第一位,然后使用limit选择第一行
有重复值:使用一个用户定义的变量或子查询统计出最常见的次数,然后选择那些出现频率等于最多次的值
(8)基于日期的汇总
使用group by中的时间列
(9)同时使用分组和总体的汇总值
使用两个语句来检索不同级别的汇总信息
先计算总公里数select @total:=sum(miles) as ‘total miles’ from
driver_log
再计算每组值的里程数,并利用总里程数计算百分比select name,sum(miles) as ‘miles/driver’,(sum(miles)*100)/@total as ‘percent of total miles’ from driver_log group by name;
使用子查询:
select name,sum(miles) as ‘miles/driver’,(sum(miles)*100)/(select sum(miles) from driver_log) as ‘percent of total miles’ from driver_log group by name;
(如果想显示不同级别的汇总值,则需要在group by 子句中加入with rollup)
(10)生成包含汇总的列表的报告
使用两个语句来检索不同级别的汇总信息或者使用编程语言完成一些工作,然后通过一条语句来完成查询

总而言之,汇总数据常用技巧:group by、limit、having、两个语句、子查询

猜你喜欢

转载自blog.csdn.net/weixin_47970003/article/details/123698718
今日推荐