你的浏览器不支持canvas

Enjoy life!

数据库-SQL(四)创建计算字段

Date: Author: JM

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

  • 参考资料
    • 《MySQL必知必会(文字版)》

1、创建计算字段

1.1 计算字段

  • 字段(field)基本上与列(column)的意思相同,经常互换使用,不过数据库列一般称为列, 而术语字段通常用在计算字段的连接上。
  • 如果存储在表中的数据都不是应用程序所需要的,我们需要直接从数据库中检索出转换、计算或格式化过的数据;而不是 检索出数据,然后再在客户机应用程序或报告程序中重新格式化。
  • 计算字段并不实际存在于数据库表中。计算字段是运行时在SELECT语句内创建的。
  • 只有数据库知道 SELECT 语句中哪些列是实际的 表列,哪些列是计算字段。从客户机(如应用程序)的角度来看,计算 字段的数据是以与其他列的数据相同的方式返回的。

1.2 拼接字段

  • 拼接(concatenate) 将值联结到一起构成单个值。
  • MySQLSELECT 语句中,可使用 Concat() 函数来拼接两个列。

select

1.3 使用别名

  • 别名(alias)是一个字段或值的替换名。别名用AS关键字赋予
  • 别名用途:常见的用途包括在实际的表列名包含不符合规定的字符(如空格)时重新命名它,在原来的名字含混或容易误解时扩充它,等等

select

1.4 执行算术计算

select

select

2、使用数据处理函数

2.1 函数没有SQL的可移植性强

select

2.2 文本处理函数

select

2.2 日期和时间处理函

  • 日期格式:yyyy-mm-dd
  • 指示 MySQL 仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。

select

  • 实例

select

select

2.3 数值处理函数

select

3、汇 总 数 据

3.1 聚集函数

  • 聚集函数(aggregate function) 运行在行组上,计算和返回单个值的函数。

select

3.2 AVG()函数

  • AVG()通过对表中行数计数并计算特定列值之和,求得该列的平均值。AVG()可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。
  • AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。
  • AVG()函数忽略列值为NULL的行。

select

3.3 COUNT()函数

  • COUNT() 函数进行计数。可利用COUNT()确定表中行的数目或符合特定条件的行的数目。
  • 使用 COUNT(*) 对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。

select

  • 使用 COUNT(column) 对特定列中具有值的行进行计数,忽略 NULL值。

select

3.4 MAX()函数和MIN()函数

  • MAX()返回指定列中的最大值。MAX()要求指定列名
  • MAX() 函数忽略列值为NULL的行。
  • 对非数值数据使用 MAX()
    • 虽然MAX()一般用来找出最大的数值或日期值,但 MySQL 允许将它用来返回任意列中的最大 值,包括返回文本列中的最大值。在用于文本数据时,如果数据按相应的列排序,则 MAX()返回最后一行。

select


  • MIN() 函数与 MAX() 函数类似。

3.5SUM()函数

  • SUM()用来返回指定列值的和(总计)。
  • SUM() 函数忽略列值为 NULL 的行
  • 检索所订购物品的总数(所有 quantity 值之和)
SELECT SUM(quantity) AS items_ordered
FROM OrderItems
WHERE order_num = 20005; 

select

3.6 聚集不同值

  • 以上 5 个聚集函数都可以如下使用:
    • 对所有行执行计算,指定 ALL 参数或不指定参数(因为 ALL 是默认行为)。
    • 只包含不同的值,指定 DISTINCT 参数。
  • 此平均值只考虑各个不同的价格:
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM Products
WHERE vend_id = 'DLL01'; 

select


  • 如果指定列名,则 DISTINCT 只能用于 COUNT()
  • DISTINCT 不能用于 COUNT(*)
  • 类似地,DISTINCT 必须使用列名,不能用于计算或表达式。

对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。