- 参考资料
- 《MySQL必知必会(文字版)》
1、创建计算字段
1.1 计算字段
- 字段(
field
)基本上与列(column
)的意思相同,经常互换使用,不过数据库列一般称为列, 而术语字段通常用在计算字段的连接上。
- 如果存储在表中的数据都不是应用程序所需要的,我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是 检索出数据,然后再在客户机应用程序或报告程序中重新格式化。
- 计算字段并不实际存在于数据库表中。计算字段是运行时在
SELECT
语句内创建的。
- 只有数据库知道
SELECT
语句中哪些列是实际的 表列,哪些列是计算字段。从客户机(如应用程序)的角度来看,计算 字段的数据是以与其他列的数据相同的方式返回的。
1.2 拼接字段
- 拼接(
concatenate
) 将值联结到一起构成单个值。
- 在
MySQL
的SELECT
语句中,可使用Concat()
函数来拼接两个列。
1.3 使用别名
- 别名(
alias
)是一个字段或值的替换名。别名用AS
关键字赋予- 别名用途:常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它,等等
1.4 执行算术计算
2、使用数据处理函数
2.1 函数没有SQL的可移植性强
2.2 文本处理函数
2.2 日期和时间处理函
- 日期格式:
yyyy-mm-dd
- 指示
MySQL
仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。
- 实例
2.3 数值处理函数
3、汇 总 数 据
3.1 聚集函数
- 聚集函数(
aggregate function
) 运行在行组上,计算和返回单个值的函数。
3.2 AVG()函数
AVG()
通过对表中行数计数并计算特定列值之和,求得该列的平均值。AVG()
可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。AVG()
只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()
函数。AVG()
函数忽略列值为NULL
的行。
3.3 COUNT()函数
COUNT()
函数进行计数。可利用COUNT()
确定表中行的数目或符合特定条件的行的数目。- 使用
COUNT(*)
对表中行的数目进行计数,不管表列中包含的是空值(NULL
)还是非空值。
- 使用
COUNT(column)
对特定列中具有值的行进行计数,忽略NULL
值。
3.4 MAX()函数和MIN()函数
MAX()
返回指定列中的最大值。MAX()
要求指定列名MAX()
函数忽略列值为NULL的行。- 对非数值数据使用
MAX()
:
- 虽然
MAX()
一般用来找出最大的数值或日期值,但MySQL
允许将它用来返回任意列中的最大 值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则MAX()
返回最后一行。
MIN()
函数与MAX()
函数类似。
3.5SUM()函数
SUM()
用来返回指定列值的和(总计)。SUM()
函数忽略列值为NULL
的行
- 检索所订购物品的总数(所有 quantity 值之和)
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005;
3.6 聚集不同值
- 以上 5 个聚集函数都可以如下使用:
- 对所有行执行计算,指定
ALL
参数或不指定参数(因为ALL
是默认行为)。- 只包含不同的值,指定
DISTINCT
参数。
- 此平均值只考虑各个不同的价格:
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01';
- 如果指定列名,则
DISTINCT
只能用于COUNT()
。DISTINCT
不能用于COUNT(*)
。- 类似地,
DISTINCT
必须使用列名,不能用于计算或表达式。