一、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. C# 连接SQL数据库

    感觉很有必要总结一下 一:C# 连接SQL数据库 Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;P ...

  2. DHCP租约时间工作原理

    问题:    很多用户在使用路由器的DHCP服务器过程中都有一个疑问,DHCP有个设置项目是设置DHCP地址的租约时间,如果设置的比较短,是否会出现租约时间到了以后会重新去获取ip地址,造成用户断网? ...

  3. 重装eclipse要做的事

    当我们要在新环境上安装eclipse时,往往会做很多的个性修改和安装一些插件,下面就这些做一下总结: 一.插件 1.svn插件(subclipse) 插件官网下载地址:http://subclipse ...

  4. Y - Design T-Shirt(第二季水)

    Description Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA ...

  5. NGINX关于配置PATHINFO

    最近在群里发现有很多小白不会配置pathinfo现贴出来配置代码照着配置就可以了     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2 ...

  6. 文字列表无缝向上滚动JavaScript代码

    <!DOCTYPE html> <html> <head> <meta charset=utf-> <title>文字列表无缝向上滚动Jav ...

  7. Ubuntu下Git服务端搭建

    1安装git $ sudo add-apt-repository ppa:git-core/ppa $ sudo apt-get update $ sudo apt-get install git 测 ...

  8. 静态编译Qt5.4.1和Qt WebKit

    图灵社区文章地址:http://www.ituring.com.cn/article/195148WebKit是个好东西,做爬虫.显示网页还是想用HTML来做桌面应用的界面都可以用他,不过一直以来都觉 ...

  9. POJ_1321——棋盘问题,回溯+剪枝

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  10. [LeetCode] 179. Largest Number 解题思路

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...