日期:2014-05-16  浏览次数:20377 次

查询之order by,group by和having的使用


(1)order 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;

(2)group 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 ]
   [ HAVING search_condition ]
   [ ORDER BY order_expression [ 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 ,一对一成立。

四、GROUP BY... 被附加于SQL 是因为聚会函数 (如 SUM) 每次都返回所有列值的合计,没有GROUP BY函数是不可能找到列值的单个分组的合计数。

语法

SELECT column,SUM(column) FROM table GROUP BY column


-----------------------------------------------
GROUP BY 示例
这个 "Sales" 表:

Company     Amount
W3Schools     5500
IBM     4500
W3Schools     7100

和这个SQL语句:

SELECT Company, SUM(Amount) FROM Sales

返回这个结果:

Company     SUM(Amount)
W3Schools     17100
IBM     17100
W3Schools     17100

上面的代码是不正确的,因为被返回的列不是部分合计。GROUP BY 子句将解决这个问题。

SELECT Company,SUM(Amount) FROM Sales            GROUP BY Company

返回结果:

Company     SUM(Amount)
W3Schools     12600
IBM     4500

五、
SQL Group by 学习 及相关应注意的地方

    在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总