一、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. handler更新UI主线程

    示例:下面代码的功能是修改UI主线程TextView的内容 public class MainActivity extends Activity { private Button btn_start; ...

  2. jquery mini ui 学习

    1.mini.parse(); 将html标签解析为miniui控件.解析后,才能使用mini.get获取到控件对象. 2.mini.get(id);根据id获取控件对象. 3.grid.load() ...

  3. telnet简单操作 模拟请求

    telnet简单操作   模拟请求 一: 二: 三: 按照以上操作即可!

  4. Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结【转载】

    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON() 一,$.get(url,[data],[callback]) 说明:url为请求地址,d ...

  5. web前端知识

    4.表格与表单 4.1 动态添加行 <script language=”javascript”> window.onload=function(){ var oTr = document. ...

  6. 数字签名.sys文件的步骤

    ------------------------------------------------------------------------------ 1. 双击MSCrossCert.crt文 ...

  7. SqlMapConfig.xml全局配置文件解析

    一:SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) settings(全局配置参数) typeAiases(类型别名) typeHandlers(类型处理器 ...

  8. Linux sar使用

    [root@ywcrmdb ~]# sar -d 1 10 Linux 2.6.32-220.el6.x86_64 (ywcrmdb)  2014年04月19日  _x86_64_ (4 CPU) 1 ...

  9. uniq 命令

    uniq 命令 文字 uniq是LINUX命令 用途 报告或删除文件中重复的行. 语法 uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ ...

  10. puppet aix之自动化用户管理

    一.    用户组的管理 (一)   Puppet组管理特性 1.   manages_aix_lam 用来管理AIX的LAM(Loadable Authentication Module)系统. 2 ...