版权声明:本文为博主原创文章,未经博主同意不可随意转载。 https://blog.csdn.net/hellokandy/article/details/83996959
数据库的表结构如下:
#列出每个部门最高薪水的结果
SELECT
szDepartment, MAX(nSalary) AS nMaxSalary
FROM
test.department
GROUP BY szDepartment;
解释一下这个结果: 1、满足“SELECT子句中的列名必须为分组列或列函数”,因为SELECT有GROUP BY szDepartment中包含的列szDepartment。 2、“列函数对于GROUP BY子句定义的每个组各返回一个结果” 根据部门分组,对每个部门返回一个结果,就是每个部门的最高薪水。
#查询每个部门总的薪水数
SELECT
szDepartment, sum(nSalary) AS nSumSalary
FROM
test.department
GROUP BY szDepartment;
#查询每个部门总的薪水数+ORDER BY
SELECT
szDepartment, sum(nSalary) AS nSumSalary
FROM
test.department
GROUP BY szDepartment
ORDER BY nSumSalary DESC;
扫描二维码关注公众号,回复:
4569412 查看本文章
#查询每个部门平均薪水数
SELECT
szDepartment, avg(nSalary) AS nAvgSalary
FROM
test.department
GROUP BY szDepartment
ORDER BY nAvgSalary DESC;
#寻找雇员数超过2个人的部门的平均薪水
在GROUP BY子句之后使用HAVING子句(可应用限定条件进行分组,以便系统仅对满足条件的组返回结果)
SELECT
szDepartment, avg(nSalary) AS nAvgSalary
FROM
test.department
GROUP BY szDepartment
HAVING count(*) > 2
ORDER BY szDepartment DESC;
#寻找雇员平均工资大于4000的部门的最高和最低薪水:
SELECT
szDepartment, MAX(nSalary) AS nMaxSalary, MIN(nSalary) AS nMinSalary
FROM
test.department
GROUP BY szDepartment
HAVING AVG(nSalary) > 4000
ORDER BY szDepartment DESC;
Having与Where的区别
- where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
其他举例说明:
查询某个用户(用户名为admin,工号为9999)在2018年11月7号到2018年11月12号之间,每一天最后的那条数据。
代码如下:
SELECT
*
FROM
(SELECT
*
FROM
user_statistics
WHERE
szUserName = 'admin'
AND szEmployeeNumber = '9999'
AND szCreatTime BETWEEN '20181107000000' AND '20181112235959'
ORDER BY nId DESC) user_statistics
GROUP BY CONVERT( szCreatTime , DATE)