zoukankan      html  css  js  c++  java
  • GROUP BY 和 ORDER BY一起使用

    GROUP BY 和 ORDER BY一起使用 

    转: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    谷歌

     
     
  • 相关阅读:
    利用Redis和Flask维护一个通用爬虫代理池
    在scrapy_splash中加载本地Cookies
    Splash对接Scrapy
    Selenium和pymongo的简单复习
    Scrapy框架
    web.xml is missing and <failOnMissingWebXml> is set to true
    深入Mybatis配置文件
    SSH和SSM的比较
    classpath路径指什么
    数据库范式
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/11923489.html
Copyright © 2011-2022 走看看