一、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

基本SQL语句练习(order by,group by,having)的更多相关文章

  1. ysql常用sql语句(12)- group by 分组查询

    测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 ...

  2. SQL语句之order by 、group by、having、where

    百度知道:1.order by是 按字段进行排序.. 字段后面可跟desc降序..asc升序..默认为升序2.group by是进行分组查询3.having和where都属于条件过滤 区别在于一般ha ...

  3. 若sql语句中order by指定了多个字段,怎么排序?

    举个例子吧: order by id desc,time desc 先是按 id 降序排列 (优先)如果 id 字段 有些是一样的话 再按time 降序排列 (前提是满足id降序排列)

  4. sql语句中order by 多个字段同时排序的应用

    order  by 后面可以跟多个字段进行排序 用A1代表第一个字段,A2代表第二个字段 一.order by A1 , A2  desc   指的是用A1升序A2降序 二.order by A1 a ...

  5. sql 语句中 order by 的用法

    order by 是用在where条件之后,用来对查询结果进行排序 order by 字段名 asc/desc asc 表示升序(默认为asc,可以省略) desc表示降序 order by 无法用于 ...

  6. 【MySQL】若sql语句中order by指定了多个字段,则怎么排序?

    举个例子吧:order by id desc,time desc先是按 id 降序排列 (优先)如果 id 字段 有些是一样的话 再按time 降序排列 (前提是满足id降序排列)   order b ...

  7. [转]SQL语句:Group By总结

    1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若 ...

  8. SQL语句:Group By总结

    1. Group By 语句简介: Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)".它的作用是通过一定的规则将一个数据集划分成若干个 ...

  9. SQL语句之Group By

    1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若 ...

随机推荐

  1. 安装VS2010后,如何设置老版本的项目文件不是默认用VS2010打开

    1.系统先后安装了VS2008和VS2010,在打开用VS2008创建的项目文件时总是会默认用VS2010打开,选择打开方式都不行,很不方便,差点要把VS2010卸载了.     其实只需要简单设置V ...

  2. vsftp关于"550 create directory operation failed"问题解决

    前提: 昨天晚上配置好了vsftp, 但登陆后,除了浏览,什么也干不了.(如新建文件/文件夹, 删除文件, 重命名等都不可操作) 都是弹出 "550 create directory ope ...

  3. sql server使用说明

    什么是sql server? SqlServer是微软的一款数据库系统产品. 是DBMS中的一种. 当每一个数据库安装到每一台电脑后,都会与计算机名称(有的是IP地址)关联.因为服务器用途的电脑不能经 ...

  4. angular2 环境配置

    看到angular发布正式版,心动不已准备测试下. 看着官网教程,使用了cli创建项目,在命令行中键入: 安装cli npm install -g angular-cli 如果安装过以前的版本,请执行 ...

  5. Hibernate中get方法和load方法的区别

    一.get和load方法都是根据id去获得对应数据的,但是获得机制不同:如果使用get方法,hibernate会去确认该id对应的数据是否存在,它首先会去session中去查询(session缓存其实 ...

  6. C语言+ODBC+SQL 操作(向SQL里面添加数据)

    为了节省时间,我就引用上一节的数据库的表和C语言的结构体数组,在结构体数组中添加数据,清空数据库数据. 第一步查询:SQLBindParameter函数的用法. SQLRETURN SQLBindPa ...

  7. PreparedStatement可以有效地防止sql被注入

    import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import jav ...

  8. 用存储过程生成订单号ID

    DECLARE @sonumber BIGINTSELECT @sonumber=CONVERT(BIGINT, @serverId + Substring(CONVERT(VARCHAR(4), D ...

  9. ELK( ElasticSearch+ Logstash+ Kibana)分布式日志系统部署文档

    开始在公司实施的小应用,慢慢完善之~~~~~~~~文档制作 了好作运维同事之间的前期普及.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 软件下载地址: https://www.e ...

  10. PYTHON文件多线程下载

    其实,在一般的文件编程中,这有两个概念要说明: 第一是,下载一个大文件,将这个大文件多为多线程. 第二是,下载N多小文件,将每个线程指定下载多个小文件. 现在实现的是多线程下载一个大文件. 今天完成了 ...