groupby和select的使⽤
GROUP BY的⽤法
1、group by概述:
简单来说:将数据库的数据⽤’by’后⾯接的规则进⾏分组,即将⼀个⼤数据库分成⼀个个相同类型数据在⼀起的⼩区域。
2、group by的语法:
SELECT column_name, function(column_name) //此处的function()函数是指SQL中的⼀些聚合函数,例如:groupby分组
MAX(),MIN(),SUM(),AVG(),COUNT()等等
FROM table_name
WHERE column_name operator value //where条件语句
GROUP BY column_name; //以某⼀列分组
3、group by实例操作:
原表:在此处就叫做call_task表吧
group by正确的进⼊⽅法:
SELECT is_pause,pause_type,count(stu_id)
FROM call_task
WHERE is_pause=‘1’
GROUP BY is_pause,pause_type
语句整个的意思就是从call_task这个表中,先筛选出满⾜is_pause='1’这个条件的所有数据,然后⼜对这些数据按照is_pause和
pause_type这两个字段分组,最后将is_pause、pause_type和学⽣总⼈数展⽰在结果集中。(这个过程就是⼀个将原数据库按照条件不断筛选最后得到我们需要的⼀个⼩的数据库的过程。这⾥⾯⼜会牵扯到⼀个sql语句执⾏顺序的问题,详细情况请看SQL执⾏顺序和SQL别名问题)。
上⾯的语句执⾏之后得到的结果数据集如下图所⽰:
group by错误的打开⽅式:
SELECT is_pause,user_id,pause_type,count(stu_id)
FROM call_task
WHERE is_pause=‘1’
GROUP BY is_pause,pause_type //在分组中并没有user_id这个字段
我们先看结果再来分析原因:
⼤家可以对⽐原数据库数据,很快会发现虽然pause_type和学⽣总数这两栏数据没有问题,但是user_id那⼀栏显⽰明显不对。为什么会出现这种情况呢因为我们在分组的时候只把is_pause和pause_type这两个字段当做分组条件,所以SQL只会对原数据库中的这两列的数据进⾏分组操作,其他列并不会参与到这个分组过程中(注意!!),但是在显⽰结果集时你⾮要让它显⽰没有进⾏分组操作的列,当然数据库就会出现错误了啦。其实数据库在这⾥也是很纠结的,因为user_id存在多个情况,它也不知道要显⽰哪个user_id,最后它采取的⽅式是选取满⾜where和分组条件时出现的第⼀组数据的user_id。
4、group by和select的⼀些总结:
如果在有group by操作中,select后⾯接的结果集字段只有两种:要么就只有group by后出现的字段,要么就是group by后出现的字段+聚合函数的组合(常⽤的五种聚合函数:min()求列中最⼩数值,max()求列中最⼤数值,avg()求平均值,sum()求列中字段对应数值的总和,count()求列的总条数)
其实分组的思想很简单:就拿上⾯例⼦来说,把分组条件想成⼀个⼆维数组,满⾜这个数组就将个数加1。(is_pause,pause_type)就是⼀个简单的⼆维数组,结合筛选条件和数据库中的数据来看,(is_pause,pause_type)就分成下⾯三种情况:(1,2),(1,4),(1,5),遇到满⾜数组情况的count(stu_id)数值加1。同理,如果你的分组条件是3个,4个或者更多,就按照这个思路想,也不会晕菜。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论