(10)合计函数
所有的合计函数如下表所示:
MIN |
返回一个给定列中最小的数值 |
MAX |
返回一个给定列中最大的数值 |
SUM |
返回一个给定列中所有数值的总和 |
AVG |
返回一个给定列中所有数值的平均值 |
COUNT |
返回一个给定列中所有数值的个数 |
COUNT(*) |
返回一个表中的行数 |
合计函数用于从SELECT语句中计算一个”返回列的数据”。它们是总结了所选数据列的结果。虽然它们需要"GROUP BY"子句(后面一个教程介绍),但是这些函数也可以在不用使用"GROUP BY"子句的情况被使用,比如 :
SELECT AVG(salary)
FROM employee;
这条语句将返回单一的结果,它包含了从employee表中所有salary列数据的平均值。为了更好的理解,我们再举个例子:
SELECT AVG(salary)
FROM employee;
WHERE title = 'Programmer';
以上这条语句将返回employee表中所有title列为'Programmer'的数据的平均值。
下面的例子中使用的语句跟其它合计函数有点不用,因为没有一个类被指定给COUNT函数。这条语句实际上将返回employee表的行数,如下:
SELECT Count(*)
FROM employees;
最后给出本节教程的配套练习:
1)作一个公司的销售表items_ordered,里面有price、product和amount。
从items_ordered表中选择price最大的数据。这里提示:使用MAX函数。
2) 计算items_ordered表中的行数。
(11)GROUP BY子句
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将被返回。
(12)HAVING子句
HAVING子句
下面先给出HAVING子句的语法:
SELECT column1, SUM(column2)
FROM "list-of-tables"
GROUP BY "column-list"
HAVING "condition";
这个HAVING子句允许你为每一个组指定条件,换句话说,可以根据你指定的条件来选择行。如果你想使用HAVING子句的话,它应该处再GROUP BY子句之后。
下面将以一个例子来解释HAVING子句。假设我们的employee表中包含雇员的name、departmen、salary和age。如果你想为每个部门中每个雇员选择平均工资的话,你可以使用下面的SQL语句:
SELECT dept, avg(salary)
FROM employee
GROUP BY dept;
当然,如果你还想只计算和显示salary大于20000的平均工资的话,你还可以加上HAVING子句:
SELECT dept, avg(salary)
FROM employee
GROUP BY dept
HAVING avg(salary) > 20000;
(13)ORDER BY子句
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;