第一章第二节 SQL的使用(二)数据处理
创建计算字段
在有些情况下,存储在表中的数据不是应用程序所需要的,需要从数据库中转换、计算或格式化过的数据,这就需要用到计算字段。因为数据库系统对这些运算做了优化,所以计算字段比在应用程序上做这些运算要快得多。
拼接字段
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子句的顺序