与其他大多数计算机语言一样,SQL支持利用函数来处理数据。函数一般是在数据上执行的,他给数据的转换和处理提供了方便,在前一章中用来去掉尾空格的RTrim()就是一个函数的例子
文本处理函数
输入: SELECT vend_name,Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;
分析: 将列 vend_name_upcase转换为大写
示例:
mysql> SELECT NAME,UPPER(NAME) AS name_upcase FROM account ORDER BY NAME; +------+-------------+ | NAME | name_upcase | +------+-------------+ | aaa | AAA | | aest | AEST | | bbb | BBB | | ccc | CCC | | ccc | CCC | | ddd | DDD | | ddd | DDD | | t57L | T57L | | test | TEST | | tsdf | TSDF | +------+-------------+常用的文本处理函数
函数 说明日期和时间处理函数
日期和时间采用相应的数据类型和特殊的格式存储,以便于能快速和有效的排序或过滤,并且节省物理存储空间
常用日期和时间处理函数
函数 说明汇总数据
聚集函数 运行在行组上,计算和返回单个值的函数
AVG函数
输入: SELECT AVG(prod_price) AS avg_price FROM products;
分析: 此SELECT语句返回值avg_price,它包含products表中所有产品的平均价格
只用于单个列 AVG()只能用来确定特定数值的平均值,而且列名必须作为函数参数给出
NULL值 AVG()函数忽略列值的NULL的行
COUNT函数
输入 SELECT COUNT(*) AS num_cust FROM customers;
分析 利用COUNT对所有行计数,不管行中各列有什么值。包含NULL值
输入 SELECT COUNT(cust_email) AS num_cust FROM customers;
分析 使用COUNT对cust_email列中有值的行进行计数,不包含NULL值
聚集不同的值
输入 SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003;
分析 排除掉相同的prod_price的值
分组数据
创建分组
输入 SELECT vend_id,COUNT(*) AS num_prods FROM proucts GROUP BY vend_id;
分析 上面的SELECT语句指定了两个列,vend_id包含产品供应商的ID,num_prods为计算字段。GROUP BY 子句指示MySQL按vendid排序并分组数据。
过滤分组
输入:
SELECT cust_id,COUNT(*) AS orders FROM orders GROUP BY cust_id HAVING COUNT(*) >= 2;分析 HAVING子句,他过滤 count(*)>=2的那些分组
HAVING和WHERE的差别:HAVING用于分组后过滤,WHERE用于分组前过滤
分组和排序
输入
SELECT order_num,SUM(quantity*item_price) AS ordertotal FROM orderitems GROUP BY order_num HAVING SUM(quantity*item_price) >=50 ORDER BY ordertotal;