原标题:SQL——Group By语句、Having语句以及WM_CONCAT使用
提起Group By一定会有
SUM() -----求和
AVG() -----求平均值
COUNT()-----计算总数
MAX()-----求最大值
MIN()-----求最小值
等函数,今天就以Count来看怎样使用group by 函数。
今天只是用一张Person表,数据关系为,人员可能在社会中有多种称呼。如Rone既是 E (Engineer)又是 S(Student)。其数据如下图:
图1.Person-人员表
我们现在要统计每个人有几种称呼,则可以使用group by 语句。记住我们要统计人员有几种社会属性,而不是社会属性有几个人。接下来看SQL怎么写:
图2.查询每个人有几个社会称呼
从查询结果中我们可以看出Adam有两种称呼,我们还可以统计同一个社会称呼的有几人,原理是一样的,只是Group By的列名称变成社会属性(Type字段),见下图:
(如果觉得绕头的话请跳过此步 。。。)
图2附图.统计社会属性对应几个人
接下来 我们又想筛选出称呼大于2的人员,因为称呼多的人都比较牛。我们想一下如果要筛选Count后的值,怎么实现呢?数据库有Having语句可以实现这个功能。看SQL语句:
图3.使用Having进行Group by后的过滤
最后,我们想要查看这个牛人Alex都有哪些称呼,在MySQL中有GROUP_CONCAT()函数,在Oracle中肯定也有一个函数WM_CONCAT()它们的作用是一样的对分组多条的数据进行“,”分割,那么我们看一下它们怎么使用:
图4.对分组函数进行逗号分割显示
Now,我们可以看出Alex既是数据 A 分析师、B 老板、E 开发工程师。对于,SUM(),AVG(),MAX(),MIN()函数只是把Count改成为其中之一就可了,但是求和、平均值、最大值、最小值肯定是数字列而不是像我们表中的字符列进行计算。
责任编辑: