mySQL分组函数、排序

分组函数,主要用于统计

SELECT SUM(列名称) FROM 表名 ---用于统计某列之和,如果有非数字,则视为0进行统计。

SELECT AVG(列名称) FROM 表名 ---用于统计某列平均值,如果有非数字,则视为0进行统计。

SELECT COUNT(列名称) FROM 表名 ---用于计算某列非NULL有多少项,如果要统计某个表有多少行使用COUNT(*)

SELECT MAX(列名称) FROM 表名 ---用于统计某列最大值,如果有非数字,则视为0进行统计。

SELECT MIN(列名称) FROM 表名 ---用于统计某列最小值,如果有非数字,则视为0进行统计。

分组查询方法:

SELECT
    列(这个列要求必须只能是group by的后面字段),分组函数()
FROM 
    表名
WHERE
    筛选条件(针对表的所有记录)
GROUP BY
    分组字段列表
HAVING(只能配合GROUP BY使用)
    与分组有关的筛选条件
ORDER BY
    排序

测试:

#查询员工人数超过5人的部门,并计算该部门员工人数,最后结果按照人数由多到少排列

SELECT COUNT(*)部门人数,department_id 
FROM 
	employees 
GROUP BY 
	department_id 
HAVING 
	部门人数>5
ORDER BY 部门人数 DESC;

结果:

#查询领导没有奖金的那个部门的员工的最高工资,且工资需要大于5000,并按最高工资从高到低排列

SELECT MAX(salary)最高工资,salary,department_id
FROM 
	employees
WHERE 
	commission_pct IS NULL#这里注意和函数ISNULL的区别,有空格
GROUP BY 
	department_id
HAVING
	最高工资>5000
ORDER BY
	最高工资 DESC;

结果:

#查询员工信息中包含字母’a‘的每个部门的平均工资,并按平均工资从高到底排列

SELECT AVG(salary)平均工资,department_id
FROM 
	employees	
WHERE 
	email LIKE '%a%'#这里是顿号,如果是强调和专用名词区分用着重号
GROUP BY 
	department_id 
ORDER BY 平均工资 DESC;

输出结果:

排序

注意:如果排序没有注明ASC还是DESC,则默认使用ASC

#列出所有员工信息,并按照工资从高到底排序,如果工资相等,则将相等的员工按员工号从高到低排序

SELECT *
FROM 
    employees
ORDER BY 
    salary DESC,employee_id DESC;

#查询部门编号大于90的部门员工信息,并按照入职时间先后进行排序

SELECT * 
FROM 
    employees
WHERE
    deparment_id >= 90
ORDER BY 
    `hiredate` ASC;

#按年薪高低显示员工信息,年薪=月工资*12 + 月工资*12*年奖金率,同时使用“别名”来进行设置排序

SELECT *,(salary*12 + (salary*12*IFNULL(commission_pct,0))) year_salary
FROM
    employees
ORDER BY
    year_salary 
DESC;

#按姓名长度来显示员工信息:使用函数来作为排序

SELECT
    last_name,LENGTH(last_name)`length`//着重号用于转义,防止和专用名词冲突
FROM
    employees
ORDER BY
    LENGTH(last_name) ASC;
发布了70 篇原创文章 · 获赞 4 · 访问量 3998

猜你喜欢

转载自blog.csdn.net/l0510402015/article/details/100118414