1 聚合函数
- 一句话概括什么是聚合函数:多行合并为一行。(大家应该明白了吧)
- 常用函数:sum,count,max,min,avg。
hive> select * from emp; OK 7369 SMITH CLERK 7902 1980/12/17 800.0 NULL 20 7499 ALLEN SALESMAN 7698 1981/2/20 1600.0 300.0 30 7521 WARD SALESMAN 7698 1981/2/22 1250.0 500.0 30 7566 JONES MANAGER 7839 1981/4/2 2975.0 NULL 20 7654 MARTIN SALESMAN 7698 1981/9/28 1250.0 1400.0 30 7698 BLAKE MANAGER 7839 1981/5/1 2850.0 NULL 30 7782 CLARK MANAGER 7839 1981/6/9 2450.0 NULL 10 7788 SCOTT ANALYST 7566 1987/4/19 3000.0 NULL 20 7839 KING PRESIDENT NULL 1981/11/17 5000.0 NULL 10 7844 TURNER SALESMAN 7698 1981/9/8 1500.0 0.0 30 7876 ADAMS CLERK 7788 1987/5/23 1100.0 NULL 20 7900 JAMES CLERK 7698 1981/12/3 950.0 NULL 30 7902 FORD ANALYST 7566 1981/12/3 3000.0 NULL 20 7934 MILLER CLERK 7782 1982/1/23 1300.0 NULL 10 Time taken: 5.998 seconds, Fetched: 14 row(s)
- 接下来我们对emp表进行操作:
1.查询员工的最大、最小、平均工资及所有工资的和
hive> select max(salary),min(salary),avg(salary),sum(salary) from emp; 结果: 5000.0 800.0 2073.214285714286 29025.0
2.查询记录数
hive> select count(*) from emp; hive> select count(1) from emp; 结果: 14
2 分组函数(Group by)
- 使用Group by时,在Group by后面出现的字段也要出现在select后面。
- 会执行mr*
1.按照部门进行分组
hive> select deptno from emp group by deptno; 结果: 10 20 30
2.查询每个部门的平均工资
hive> select deptno,avg(salary) avg_sal from emp group by deptno; 结果: 10 2916.6666666666665 20 2175.0 30 1566.6666666666667 1 2 3 4 5
3.查询平均工资大于2000的部门(使用having子句限定分组查询)
hive> select deptno,avg(salary) from emp group by deptno having avg(salary) > 2000; 结果: 10 2916.6666666666665 20 2175.0 1 2 3 4
4.按照部门和入职时间进行分组(先按照部门进行分组,然后针对每组按照入职时间进行分组)
hive> select deptno,hiredate from emp group by deptno,hiredate; 结果: 10 1981/11/17 10 1981/6/9 10 1982/1/23 20 1980/12/17 20 1981/12/3 20 1981/4/2 20 1987/4/19 20 1987/5/23 30 1981/12/3 30 1981/2/20 30 1981/2/22 30 1981/5/1 30 1981/9/28 30 1981/9/8