点击蓝字“程序员考拉”欢迎关注!
一.SELECT子句和聚合函数
1.选取所有列
SELECT * FROM TABELNAME
当一个FROM子句包含两个表或多个表,需要在*符号前使用一个表指定:
SELECT PENALITIES.* FROM PENALITIES INNER JOIN TEAMS ON PENALITIES.PLAYERNO=TEAMS.PLAYERNO
2.SELECT子句除了包含列名之外,也可以接受一个直接量,计算或一个标量函数的形式:
3.使用DISTINCT移除重复的行
SELECT DISTINCT 列名 FROM TABLENAME
DISTINCT 是针对整个行,而不是仅仅针对在语句中紧跟在DISTINCT后面的表达式。
聚合函数:
聚合函数会对当前所在表当做一个组进行统计,和分组一起使用,常用的聚合函数有以下几种。
COUNT()函数
在TOWN列中,有多少个不同的城市名:
SELECT COUNT(DISTINCT TOWN) FROM PLAYERS
获取从球员的姓氏的不同开头字母的个数:
SELECT COUNT(DISTINCT SUBSTR(NAME,1,1)) FROM PLAYERS
MAX和MIN函数:可以分别确定一列中的最大值和最小值。
SUM函数:计算的是一个特定列中的所有值的总和。
AVG函数:计算的是一个特定列中的值的算术平均值。
VARIANCE函数:计算特定的一列值的方差。
STDDEV函数:计算特定的一列值的标准差。
二.GROUP BY子句
1.对一列分组
将列按城市名分组:
对于每个城市,统计它在表cities中出现的次数:
2.对两个列或更多列进行分组
一个GROUP BY子句可以包含两个或更多列。
3.带有排序的分组
结果按升序排列:ASC
结果按降序排列:DESC
4.GROUP_CONCAT函数
这个函数的值等于属于一个组的指定列的所有值。
一个GROUP_CONCAT函数的字符值的长度有限,默认值是1024,可通过“SET @@GROUP_CONCAT_MAX_LEN=数值”来设定。
5.使用ROLLUP的分组
使用于在GROUP BY子句中进行两次以上的分组。
有下面这样一张表:
可以按照部门和职位进行分组,计算相关部门相关职位的薪资的平均值:
如果希望再显示部门(dep)的员工薪资的平均值,就要用到带有WITH ROLLUP的GROUP BY子句: