文章目录
  1. 创建计算字段
  2. 数据处理函数
  3. 汇总数据
  4. 分组数据

创建计算字段

在有些情况下,存储在表中的数据不是应用程序所需要的,需要从数据库中转换、计算或格式化过的数据,这就需要用到计算字段。因为数据库系统对这些运算做了优化,所以计算字段比在应用程序上做这些运算要快得多。

拼接字段

1
SELECT CONCAT(vend_name, '(', vend_country, ')') FROM Vendors ORDER BY vend_name;

必须给计算得到的列一个别名,以便应用程序可以引用它。别名用AS关键字赋予。

1
SELECT CONCAT(RTRIM(vend_name), '(', RTRIM(vend_country), ')') AS vend_title FROM Vendors ORDER BY vend_name;

执行算术计算

就是普通的+、-、*、/。

1
SELECT prod_id, quantity, item_price, quantity*item_price FROM OrderItems WHERE order_num=20008;

数据处理函数

如下是常用的文本处理函数。

 

如下是常用的数值处理函数。

汇总数据

聚集函数:运行在行组上,计算和返回单个值的函数。

 

计算Products表中所有产品的平均价格

1
SELECT AVG(prod_price) AS avg_price FROM Products;

计算特定供应商所提供产品的平均价格

1
SELECT AVG(prod_price) AS avg_price FROM Products WHERE vend_id='DLL01';

使用COUNT(*)可对表中行的数目进行计数;使用COUNT(column)对特定列中具有值的行进行计数。

SUM返回指定列值的和

1
SELECT SUM(quantity) AS items_ordered FROM OrderItems WHERE order_num =20005;

若要聚集不同值,需指定DSITINCT参数。

1
SELECT AVG(DISTINCT prod_price) AS avg_price FROM Products;

也可以在SELECT语句中使用多个聚集函数。

1
SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg FROM Products;

分组数据

为处理”计算每个供应商提供商品的平均价格”这类问题,就需要用到数据分组。

使用GROUP BY语句建立分组

1
SELECT vend_id, AVG(prod_price) AS avg_price FROM Products GROUP BY vend_id;

使用GROUP BY子句有如下规定。

 

GROUP BY子句出现在WHERE子句之后、ORDER BY子句之前

过滤分组:HAVING [判断条件]

1
SELECT vend_id, AVG(prod_price) AS avg_price FROM Products GROUP BY vend_id HAVING COUNT(*)>2;

小结:SELECT子句的顺序