一、GROUP BY 和ORDER BY
1.使用Order by 进行排序,默认升序ASC,降序则使用DESC;(还可以这样:order by 1表示按第一列排序;order by 2 desc表示按第2列降序排序,order by 3...) SELECT JOB_ID,SALARY FROM EMPLOYEES ORDER BY JOB_ID; JOB_ID SALARY AC_ACCOUNT 8300.00 AC_MGR 12008.00 AD_ASST 4400.00 AD_PRES 24000.00 AD_VP 17000.00 AD_VP 17000.00 FI_ACCOUNT 8200.00 FI_ACCOUNT 9000.00 FI_ACCOUNT 6900.00 FI_ACCOUNT 7700.00 FI_ACCOUNT 7800.00 FI_MGR 12008.00 HR_REP 6500.00 IT_PROG 9000.00 IT_PROG 6000.00 IT_PROG 4200.00 IT_PROG 4800.00 IT_PROG 4800.00 MK_MAN 13000.00 MK_REP 6000.00 PR_REP 10000.00 2.使用GROUP BY子句进行分组 使用GROUP BY子句时必须满足以下条件: 在SELECT 子句的后面只可以有两类表达式:统计函数和进行分组的列名 在SELECT 子句中的列名必须是进行分组的列,除此之处添加其它列名都是错误的,但是GROUP BY子句后面的列名可以不出现在SELECT子句中。 如果使用了WHERE子句,那么所有参加分组计算的数据必须首先满足WHERE子句指定的条件。 在默认情况下,将按照GROUP BY子句指定的分组进列升序排序,如果需要重新排序,可以使用ORDER BY 子句指定新的排序顺序。 SELECT JOB_ID,AVG(SALARY),SUM(SALARY),MAX(SALARY),COUNT(JOB_ID) FROM EMPLOYEES GROUP BY JOB_ID; JOB_ID AVG(SALARY) SUM(SALARY) MAX(SALARY) COUNT(JOB_ID) IT_PROG 5760 28800 9000 5 AC_MGR 12008 12008 12008 1 AC_ACCOUNT 8300 8300 8300 1 ST_MAN 7280 36400 8200 5 PU_MAN 11000 11000 11000 1 AD_ASST 4400 4400 4400 1 AD_VP 17000 34000 17000 2 SH_CLERK 3215 64300 4200 20 FI_ACCOUNT 7920 39600 9000 5 FI_MGR 12008 12008 12008 1 PU_CLERK 2780 13900 3100 5 SA_MAN 12200 61000 14000 5 MK_MAN 13000 13000 13000 1 PR_REP 10000 10000 10000 1 AD_PRES 24000 24000 24000 1 SA_REP 8350 250500 11500 30 MK_REP 6000 6000 6000 1 ST_CLERK 2785 55700 3600 20 HR_REP 6500 6500 6500 1 3. SELECT DEPARTMENT_ID,JOB_ID,AVG(SALARY),SUM(SALARY),MAX(SALARY),COUNT(*) FROM EMPLOYEES GROUP BY DEPARTMENT_ID,JOB_ID; DEPARTMENT_ID JOB_ID AVG(SALARY) SUM(SALARY) MAX(SALARY) COUNT(*) 110 AC_ACCOUNT 8300 8300 8300 1 90 AD_VP 17000 34000 17000 2 50 ST_CLERK 2785 55700 3600 20 80 SA_REP 8396.55172413793 243500 11500 29 50 ST_MAN 7280 36400 8200 5 80 SA_MAN 12200 61000 14000 5 110 AC_MGR 12008 12008 12008 1 90 AD_PRES 24000 24000 24000 1 60 IT_PROG 5760 28800 9000 5 100 FI_MGR 12008 12008 12008 1 30 PU_CLERK 2780 13900 3100 5 50 SH_CLERK 3215 64300 4200 20 20 MK_MAN 13000 13000 13000 1 100 FI_ACCOUNT 7920 39600 9000 5 SA_REP 7000 7000 7000 1 4.ROLLUP:在最后一行列出统计汇总 SELECT JOB_ID,AVG(SALARY),SUM(SALARY),MAX(SALARY),COUNT(*) FROM EMPLOYEES GROUP BY ROLLUP(JOB_ID); JOB_ID AVG(SALARY) SUM(SALARY) MAX(SALARY) COUNT(*) AC_ACCOUNT 8300 8300 8300 1 AC_MGR 12008 12008 12008 1 AD_ASST 4400 4400 4400 1 AD_PRES 24000 24000 24000 1 AD_VP 17000 34000 17000 2 FI_ACCOUNT 7920 39600 9000 5 FI_MGR 12008 12008 12008 1 HR_REP 6500 6500 6500 1 IT_PROG 5760 28800 9000 5 MK_MAN 13000 13000 13000 1 MK_REP 6000 6000 6000 1 PR_REP 10000 10000 10000 1 PU_CLERK 2780 13900 3100 5 PU_MAN 11000 11000 11000 1 SA_MAN 12200 61000 14000 5 SA_REP 8350 250500 11500 30 SH_CLERK 3215 64300 4200 20 ST_CLERK 2785 55700 3600 20 ST_MAN 7280 36400 8200 5 6461.83177570093 691416 24000 107 5.CUBE:在第一行列出统计汇总 SELECT JOB_ID,AVG(SALARY),SUM(SALARY),MAX(SALARY),COUNT(*) FROM EMPLOYEES GROUP BY CUBE(JOB_ID); JOB_ID AVG(SALARY) SUM(SALARY) MAX(SALARY) COUNT(*) 6461.83177570093 691416 24000 107 AD_VP 17000 34000 17000 2 AC_MGR 12008 12008 12008 1 FI_MGR 12008 12008 12008 1 HR_REP 6500 6500 6500 1 MK_MAN 13000 13000 13000 1 MK_REP 6000 6000 6000 1 PR_REP 10000 10000 10000 1 PU_MAN 11000 11000 11000 1 SA_MAN 12200 61000 14000 5 SA_REP 8350 250500 11500 30 ST_MAN 7280 36400 8200 5 AD_ASST 4400 4400 4400 1 AD_PRES 24000 24000 24000 1 IT_PROG 5760 28800 9000 5 PU_CLERK 2780 13900 3100 5 SH_CLERK 3215 64300 4200 20 ST_CLERK 2785 55700 3600 20 AC_ACCOUNT 8300 8300 8300 1 FI_ACCOUNT 7920 39600 9000 5
二、HAVING子句
HAVING子句通常与GROUP BY子句一起使用,在完成对分组结果集进行统计之后,使用HAVING子句再次对结果集进行筛选。如果不使用GROUP BY子句,HAVING子句功能与WHERE子句一样。HAVING与WHERE的不同之处在于HAVING子句与组相关。如果指定了WHERE子句,而没有指定GROUP BY子句,那么HAVING子句将应用于WHERE子句的输出,并且整个输出被看作是一个组。如果SELECT语句即没有指定WHERE子句,也没有指定GROUP BY子句,那么HAVING子句将应用于FROM子句的输出,并且将其看作是一个组。 在SELECT语句中,首先由FROM子句找到数据表,WHERE子句则接收FROM子句输出的数据,而HAVING子句则接收来自GROUP BY、WHERE或FROM子句的输入。 SELECT JOB_ID,AVG(SALARY),SUM(SALARY),MAX(SALARY),COUNT(*) FROM EMPLOYEES GROUP BY JOB_ID HAVING AVG(SALARY)>10000; JOB_ID AVG(SALARY) SUM(SALARY) MAX(SALARY) COUNT(*) AC_MGR 12008 12008 12008 1 PU_MAN 11000 11000 11000 1 AD_VP 17000 34000 17000 2 FI_MGR 12008 12008 12008 1 SA_MAN 12200 61000 14000 5 MK_MAN 13000 13000 13000 1 AD_PRES 24000 24000 24000 1