zoukankan      html  css  js  c++  java
  • order by,group by和having的使用

    1order by
    ORDER BY子句的语法为:
    SELECT column1, SUM(column2) FROM "list-of-tables"
    ORDER BY "column-list" [ASC | DESC];
    [ ] = optional
    ORDER BY是一个可选的子句,它允许你根据指定要order by的列来以上升或者下降的顺序来显示查询的结果。例如:
    ASC = Ascending Order –这个是缺省的
    DESC = Descending Order
    下面举个例子:
    SELECT employee_id, dept, name, age, salary
    FROM employee_info
    WHERE dept = 'Sales'
    ORDER BY salary;

    这条SQL语句将从employee_info表中列dept等于'Sales'选择employee_id,、dept、name、age和salary,并且根据他们的salary按升序的顺序来列出检索结果。

    如果你想对多列排序的话,那么在列与列之间要加上逗号,比如:
    SELECT employee_id, dept, name, age, salary
    FROM employee_info
    WHERE dept = 'Sales'
    ORDER BY salary, age DESC;



    2group by
    一、首先讲讲GROUP BY子句语法:
    SELECT column1, SUM(column2) FROM "list-of-tables"
    GROUP BY "column-list";
    这个GROUP BY子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列。当然最好解释的方法是给出一个例子啦:
    假设我们将从employee表中搜索工资最高的列,可以使用以下的SQL语句:
    SELECT max(salary), dept
    FROM employee
    GROUP BY dept;

    这条语句将在每一个单独的部门中选择工资最高的工资。结果他们的salary和dept将被返回。

    二、group by从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
     
    什么是“聚合函数”?
     像sum()、count()、avg()等都是“聚合函数”
     使用group by的目的就是要将数据分类汇总。

     一般如:
        select单位名称,count(职工id),sum(职工工资) form [某表]
        group by单位名称
       这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。

     在sql命令格式使用的先后顺序上,group by先于order by。
     
      select命令的标准格式如下:
     
       SELECT select_list
       [ INTO new_table ]
       FROM table_source
       [ WHERE search_condition ]
       [ GROUP BY group_by_expression_r ]
       [ HAVING search_condition ]
       [ ORDER BY order_expression_r [ ASC | DESC ] ]

    三、理解group by:

    表1:

     

     type

    udate

     mp3

    2006-3-2

    flash

     2006-1-2

    mp3

    2006-2-2

     

     

     

    在表1中,假设要取出最后更新的某一类型(type)产品的日期
    那么就要使用group by type的方式
    select type from表1 group by type
    但这样就无法读到udate
     
    再来
    select type,udate from表1 group by type
    这种写法是错误的。
    原因是type和udate不是一对一的关系。就是说一种type有几个udate
    所以
    selct ** group by **之后没办法组织形成新的表,不知道要取哪个udate
     
    再来
    select type,max(udate) from表1 group by type
    这样就正确了。
    取的是最大的udate,一对一成立。
  • 相关阅读:
    uva 408 Uniform Generator
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 栅格打印问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 打水问题
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
    Java实现 蓝桥杯VIP 算法提高 不同单词个数统计
  • 原文地址:https://www.cnblogs.com/furenjian/p/2915200.html
Copyright © 2011-2022 走看看