数据库中的分组函数+练习题

来源:互联网 发布:sql 求平均值 编辑:程序博客网 时间:2024/05/01 14:52

一.常用的分组函数

1.统计数量 count(*)
2.求平均函数 Avg()
3.最大值max()
4.最小值min()
5.总数 sum()

二.特殊的分组函数

1.group by:按什么字段分组
2.having :对分好的组再次条件筛选(一般对分组函数筛选)
3.order by +字段 desc:按字段降序排列,默认升序ASC排列
4.where :单行筛选条件
注意:
1:分组函数一般出现在 select ,having
2.如果没有group by字句,select中不允许出现单行字段函数和分组函数混淆使用//select empno,avg(salary) from emp 是非法的
3.不允许在where条件中使用分组函数

三.练习题

  1. 找出每个月倒数第三天受雇的员工(如: 2009-5-29)
    SELECT * FROM employees WHERE hire_date= last_day(hire_date) - 2;

2.找出 25 年前雇的员工
SELECT * FROM employees WHERE to_char(SYSDATE,’yyyy’) - to_char(hire_date,’yyyy’) > 10 ORDER BY hire_date ;

3.所有员工名字前加上 Dear ,并且名字首字母大写
SELECT ‘Dear ’ || initcap(first_name || ’ ’ ||last_name) FROM employees;

3.分组统计各部门下工资>500的员工的平均工资、
SELECT department_id,AVG(salary) FROM employees WHERE salary>5000 GROUP BY department_id;

4.算出每个职位的员工数和最低工资
SELECT job_id,COUNT(*) 人数,MIN(salary) 最低工资 FROM employees GROUP BY job_id;

5.列出员工表中每个部门的员工数,和部门no

SELECT department_id,COUNT(employee_id) FROM employees GROUP BY department_id;
6.得到工资大于自己部门平均工资的员工信息

SELECT e.*
FROM employees e,(SELECT department_id did,AVG(salary) avgsal FROM employees GROUP BY department_id) t
WHERE salary > avgsal AND e.department_id = t.did

7.查询员工编号 姓名 ,自己部门领导姓名

SELECT employee_id,FIRST_NAME,fname
FROM employees e,
(SELECT e.department_id did,first_name fname FROM employees e,departments d
WHERE e.employee_id=d.manager_id) t//括号里面临时表查询除数据
WHERE e.department_id= t.did AND first_name <> fname; – !=

1 0
原创粉丝点击