1. AVG() 函数返回数值列的平均值。
下面的 SQL 语句选择访问量高于平均访问量的 "site_id" 和 "count":
例如: SELECT site_id, count FROM access_log WHERE count > (SELECT AVG(count) FROM access_log);
2. COUNT() 函数返回匹配指定条件的行数。
COUNT(*) 函数返回表中的记录数:
例如: SELECT COUNT(*) FROM table_name;
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目:
例如: SELECT COUNT(DISTINCT column_name) FROM table_name;
说明: SELECT DISTINCT 语句用于返回唯一不同的值; 在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
3. MAX() 函数返回指定列的最大值。
下面的 SQL 语句从 "Websites" 表的 "alexa" 列获取最大值:
例如: SELECT MAX(alexa) AS max_alexa FROM Websites;
4. MIN() 函数返回指定列的最小值。
下面的 SQL 语句从 "Websites" 表的 "alexa" 列获取最小值:
例如:SELECT MIN(alexa) AS min_alexa FROM Websites;
5. SUM() 函数返回数值列的总数。
下面的 SQL 语句查找 "access_log" 表的 "count" 字段的总数:
例如:SELECT SUM(count) AS nums FROM access_log;
6. GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
现在我们想要查找每个送货员配送的订单数目。
下面的 SQL 语句统计所有网站的访问的记录数:
SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
7. HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。
现在我们想要查找总访问量大于 200 的网站,并且 alexa 排名小于 200。
我们在 SQL 语句中增加一个普通的 WHERE 子句:
实例
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
SQL MID() 实例
我们拥有下面这个 "Persons" 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望从 "City" 列中提取前 3 个字符。
我们使用如下 SQL 语句:
SELECT MID(City,1,3) as SmallCity FROM Persons
结果集类似这样:
SmallCity |
---|
Lon |
New |
Bei |
SQL LEN() 实例
我们拥有下面这个 "Persons" 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望取得 "City" 列中值的长度。
我们使用如下 SQL 语句:
SELECT LEN(City) as LengthOfCity FROM Persons
结果集类似这样:
LengthOfCity |
---|
6 |
8 |
7 |
SQL HAVING 实例
我们拥有下面这个 "Orders" 表:
O_Id | OrderDate | OrderPrice | Customer |
---|---|---|---|
1 | 2008/12/29 | 1000 | Bush |
2 | 2008/11/23 | 1600 | Carter |
3 | 2008/10/05 | 700 | Bush |
4 | 2008/09/28 | 300 | Bush |
5 | 2008/08/06 | 2000 | Adams |
6 | 2008/07/21 | 100 | Carter |
现在,我们希望查找订单总金额少于 2000 的客户。
我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Customer HAVING SUM(OrderPrice)<2000
结果集类似:
Customer | SUM(OrderPrice) |
---|---|
Carter | 1700 |
SQL UCASE() 实例
我们拥有下面这个 "Persons" 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为大写。
我们使用如下 SQL 语句:
SELECT UCASE(LastName) as LastName,FirstName FROM Persons
结果集类似这样:
LastName | FirstName |
---|---|
ADAMS | John |
BUSH | George |
CARTER | Thomas |
SQL LCASE() 实例
我们拥有下面这个 "Persons" 表:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
2 | Bush | George | Fifth Avenue | New York |
3 | Carter | Thomas | Changan Street | Beijing |
现在,我们希望选取 "LastName" 和 "FirstName" 列的内容,然后把 "LastName" 列转换为小写。
我们使用如下 SQL 语句:
SELECT LCASE(LastName) as LastName,FirstName FROM Persons
结果集类似这样:
LastName | FirstName |
---|---|
adams | John |
bush | George |
carter | Thomas |
SQL ROUND() 实例
我们拥有下面这个 "Products" 表:
Prod_Id | ProductName | Unit | UnitPrice |
---|---|---|---|
1 | gold | 1000 g | 32.35 |
2 | silver | 1000 g | 11.56 |
3 | copper | 1000 g | 6.85 |
现在,我们希望把名称和价格舍入为最接近的整数。
我们使用如下 SQL 语句:
SELECT ProductName, ROUND(UnitPrice,0) as UnitPrice FROM Products
结果集类似这样:
ProductName | UnitPrice |
---|---|
gold | 32 |
silver | 12 |
copper | 7 |