zoukankan      html  css  js  c++  java
  • [转载]查询之order by,group by和having的使用(一)

    转载:jacky的个人空间 http://www.uoik.cn/?uid-2-action-viewspace-itemid-489

     

     

    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,一对一成立。

     

     

  • 相关阅读:
    MySQL5.7二进制安装及多实例
    MySQL5.7版本的yum安装方式
    PHP安装
    MySQL5.6安装部署及多实例主从
    Prometheus监控MySQL和Linux主机结合Grafana出图
    MySQL5.7源码安装(编译)
    MySQL基本管理
    WC框架
    .NET 调用虚方法2 转
    .NET 调用虚方法1 转
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480915.html
Copyright © 2011-2022 走看看