转:http://lzfhope.blog.163.com/blog/static/636399220092554045196/

环境:oracle 10g
单单group by 或者order by本身没有特别好写的,因为这二者都是及其常用的sql句子的组成.
通常order by 和group by 没有太多的关系,但是它们常常组合在一起用,完成分组加排序的功能.
例如有下表:

 SQL> select * from students;        
                      ID AREA       STU_TYPE                  SCORE
        ---------------- ---------- -------- ----------------------
                       1 111        g                         80.00
                       1 111        j                         80.00
                       2 111        g                         80.00
                       .......

这个时候,执行这个语句是可以的:

 SQL> select stu_type,sum(score) from students group by stu_type;        
STU_TYPE SUM(SCORE)
         -------- ----------
         j               542
         g               689

但是如果执行下面这个语句,就会报告错误:

 SQL> select stu_type,sum(score) from students group by stu_type order by id;
select stu_type,sum(score) from students group by stu_type order by id
ORA-00979: 不是 GROUP BY 表达式

正确的应该是这样的:

 SQL> select stu_type,sum(score) from students group by id,stu_type order by id;
STU_TYPE SUM(SCORE)
-------- ----------
g               237
j                80
g               140
j               135
g               133
j               148
g               179
j               179
8 rows selected

也许结果不是所愿,但是主要为了明白一个简单的道理:order by 中列,应该出现在group by 子句中。这是一个很显然的道理。

======================

GROUP BY 和 ORDER BY一起使用

写程序也有很长的一段时间了,有些东西我总不曾去思考,很少去积累一些有用的东西,总喜欢“用要即拿”的心态来对待,这是非常不好的坏习惯。这样只会造成依赖心太强,每当遇到一些小小的问题都需要去翻资料。就好像今天写一条查询语句的时候,连group by 和 order by连用都不清楚,我想我以后得注意这些问题。

正确使用如下:

以下是引用片段:
SELECT dep.department_name, MAX(emp.salary), MIN(emp.salary)  
FROM departments dep  
LEFT JOIN employees emp  
ON (dep.department_id = emp.department_id)  
GROUP BY dep.department_name  
--order by 的列,必须是出现在group by 子句里的列   
ORDER BY dep.department_name DESC

错误使用如下:(执行后报错:ORA-00979:不是GROUP BY 表达式)

以下是引用片段:
SELECT dep.department_name, MAX(emp.salary), MIN(emp.salary)  
FROM departments dep  
LEFT JOIN employees emp  
ON (dep.department_id = emp.department_id)  
GROUP BY dep.department_name  
--order by 的列,应该出现在group by 子句中   
ORDER BY dep.department_id DESC

=========================================

GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。

group by a,b,c       则a,b,c三个字段是按照先按a字段对数据行进行排序,再按b字段对那些字段a为同一个值的数据行进行排序,再再按c字段对那些字段a为同一个值且字段b为同一个值的数据行进行排序

order  by a,b,c   也是如此

故而

表T 有a,b,c三个字段,按a分组再按c排序的方法如下:

select * from T order  by a,c//两个字段顺序不能颠倒

或者

select * from T group  by a,c//两个字段顺序不能颠倒

参考

order by group by 一起用  谷歌

order by and group by together in sql    谷歌

GROUP BY 和 ORDER BY一起使用的更多相关文章

  1. 深度分析mysql GROUP BY 与 ORDER BY

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQLi ...

  2. mysql GROUP BY 与 ORDER BY 查询不是最新记录

    转载:http://blog.csdn.net/qvbfndcwy/article/details/7200910 鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,( ...

  3. mysql “group by ”与"order by"的研究--分类中最新的内容

    这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from ...

  4. select的5中子句where,group by, havaing, order by, limit的使用顺序及实例

    -- 语法: SELECT select_list FROM table_name [ WHERE search_condition ] [ GROUP BY group_by_expression ...

  5. GROUP BY和ORDER BY共用

    SELECT BatchNumber,MAX(Id) FROM dbo.SceneryOrder AND BatchNumber<>'' GROUP BY BatchNumber DESC

  6. 查询语句中select from where group by having order by的执行顺序

    查询语句中select from where group by having order by的执行顺序   1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--w ...

  7. 转:深入研究mysql中group by与order by取分类最新时间内容

    鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里, (不知道是不是现在水平的限制,总之我还没找到在用ContentProvider时可以使用子查询),主要方法是用SQL ...

  8. group by、order by 先后顺序问题

    今天遇到个小问题 本来是很基础的问题 应该说 基础知道掌握的不牢  好了不说 错误 语句 :   select  a.a1  from table a  where order by a.a1 gro ...

  9. group by和order by的错误

    select  u.Col_Name from hs_user u left join ( select tuid,count(*) as 'col_sumtopic' from BBS_Topic ...

  10. mysql中group by和order by同时使用无效的替代方案

    前言 最近一年由于工作需要大部分使用的都是NoSql数据库,对关系型数据库感觉越来越陌生,一个由group by和order by 引发的血案由此而生.在此做个记录,以备不时之需. 需求 首先,看一下 ...

随机推荐

  1. VIM打开shell脚本中文乱码解决

    1. 查找 .vimrc文件 通常有2个地方保存这个文件的: (1) 在/etc/文件夹下面,是所有用户的vim配置 (2)每个用户的开始登录的文件夹下面,有些不一定有,比如hadoop用户,则在/h ...

  2. kafka_2.11-0.10.2.1中的auto.offset.reset

    在使用spark连接kafka消费topic时,发现无论怎么设置,也无法从头开始消费. 查看配置得出auto.offset.reset的以下3种设置及含义: earliest 当各分区下有已提交的of ...

  3. 绑定内网和安全redis和mongo以及MQ

    redis允许局域网访问其实很简单.网上一堆都不怎么靠谱. 特此记录一下. 可参考此篇 假设A B 两台机器 在B(ip:192.168.1.99)机器上修改redis配置文件 bind 192.16 ...

  4. 回文自动机 + DFS --- The 2014 ACM-ICPC Asia Xi’an Regional Contest Problem G.The Problem to Slow Down You

    The Problem to Slow Down You Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.actio ...

  5. ComBoFuzzySearch.js

    /** * combobox和combotree模糊查询 */(function () { //combobox可编辑,自定义模糊查询 $.fn.combobox.defaults.editable ...

  6. linux 测试工具

    最近在寻找linux的测试工具,试用了一些.记录如下. memtester 内存测试工具,通过对内存进行读写进行测试.可以对同一块空间进行多次的读写. 源码分析 http://www.cnblogs. ...

  7. 转载:Struts2支持断点续传下载实现

    转自:http://blog.sina.com.cn/s/blog_667ac0360102eckm.html package com.ipan.core.controller.web.result; ...

  8. ThinkPHP中的验证码不出现的解决办法

    出现这种问题的原因可能是因为代码写的不规范,出现了其他的输出:解决办法: 原代码:     public function captchaAction()    {        $verify = ...

  9. iOS TabBar添加阴影

    效果图如下所示: 直接上代码 //移除顶部线条 self.tabBar.backgroundImage = [UIImage new]; self.tabBar.shadowImage = [UIIm ...

  10. Android Design Support Library 中控件的使用简单介绍(一)

    Android Design Support Library 中控件的使用简单介绍(一) 介绍 在这个 Lib 中主要包含了 8 个新的 material design 组件!最低支持 Android ...