一、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. apache添加php支持

    在php编译安装好后,需要在apache中添加对php的支持,方法:找到“#AddType application/x-gzip .gz .tgz”并在后面加入AddType application/ ...

  2. OC之字符串 NSString与NSMutableString

    一.NSString 不可变字符串的操作1)将字符串常量对象直接赋值给字符串引用 NSString *str1=@"hello"; 字符串对象的输出格式:NSLog(@" ...

  3. 《python基础教程》笔记之 列表

    list函数 list函数将其他类型的序列转换为列表,如 >>> list("hello world")['h', 'e', 'l', 'l', 'o', ' ' ...

  4. web安全:HTTPS

    E1:搭建zoobar网站开启apache服务和mysql服务service apache2 startservice mysql start 建立数据库和表mysql->create data ...

  5. jsp js java

    Java技术 J a v a是一种 简单易用. 完全面向对象. 具有平台无关性且 安全可靠的主要面向I n t e r n e t的开发工具. 自从1 9 9 5年正式问世以来,J a v a的快速发 ...

  6. win7禁止自动使用浏览器打开FTP而是用资源管理器

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\ftp] @="URL:File Transfer Protocol" ...

  7. CSS5.4 安装问题集

    由于手痒,将5.2 卸载了,装了5.4 出现如下错误:install failed to install com.ti.ccstudio.debugserver.win32 corrctly. ... ...

  8. 转 Android - 文件操作

    一.资源文件的读取: 1) 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = ...

  9. Linux下创建、查看、提取和修改静态库(*.a)

    先说明一点,静态库文件是由多个目标文件打包而成的,在windows下静态库文件的后缀是.lib,而在linux下静态库文件的后缀是.a(a是archive的缩写,也就是文档文件). 废话少说,下面直接 ...

  10. linux内存管理--slab及其代码解析

    Linux内核使用了源自于 Solaris 的一种方法,但是这种方法在嵌入式系统中已经使用了很长时间了,它是将内存作为对象按照大小进行分配,被称为slab高速缓存. 内存管理的目标是提供一种方法,为实 ...