zoukankan      html  css  js  c++  java
  • 基本SQL语句练习(order by,group by,having)

    一、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
  • 相关阅读:
    面向对象--接口的实际应用--制定标准
    iconv命令 gbk 转 UTF-8
    map,list
    springMVC配置(XML配置详解)
    关于git-Git 分支管理和冲突解决
    使用Intellij idea开发
    Centos7.2 Install subversion server
    Nginx 多域名配置
    Nginx 解析PHP的原理 | CGI、FastCGI及php-fpm的关系
    Centos7 Yum安装 PHP5.5,5.6,7.0
  • 原文地址:https://www.cnblogs.com/rusking/p/3780854.html
Copyright © 2011-2022 走看看