MySQL黄冈学习内参:3.创建计算字段、使用数据处理函数、汇总数据、分组数据、使用子查询

3.1 创建计算字段

计算字段

拼接字段

SELECT语句 中可以使用Contact()函数来连接两个列。

SELECT Contact(name, '(', country, ')')
FROM vendors
ORDER BY name

Rtrim可以删除数据右侧多余的空格
Ltrim左侧
Trim删除
两边的空格

SELECT Contact(Rtrim(name), '(', Rtrim(country), ')')
FROM vendors
ORDER BY name

使用别名

SELECT Contact(Rtrim(name), 
'(', Rtrim(country), ')') AS title
FROM vendors
ORDER BY name

SQL创建 了一个包含一个包含指定计算的名为title的计算字段

执行算术计算

SELECT id, quantity, price, 
quatity*price AS expanded_price
FROM orderitems
WHERE order_num=2005

3.2 使用数据处理函数

文本处理函数

SELECT name, Upper(name) 
AS name_upcase
FROM vendors
ORDER BY name

日期和时间处理函数

SELECT id, num
FROM orders
WHERE Data(order_date)='2008-08-01';

如果要的是日期,请使用Date()
同样的,时间:Time();

某一日期内的订单

SELECT id, num
FROM orders
WHERE Data(order_date) BETWEEN '2008-08-01' AND '2009-08-01';

3.3 汇总数据

聚集函数

函数说明
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和

AVG()

SELECT AVG(price) AS avg_price
FROM orderitems
WHERE id=2005

AVG()忽略列值为NULL的行

COUNT()

  1. COUNT(*) 对表中行的数目 进行计算,不管为NULL或者非NULL
  2. COUNT(column) 对特定列中的具有值 的行进行计算,忽略NULL值

MAX()

SELECT MAX(price) AS max_price
FROM orderitems

MIN()

SUM()

聚集不同值

ALL为默认
只包含不同的值,指定DISTINCT参数
COUNT(DISTINCT pro_price)

组合聚集函数

3.4 分组数据

GROUP BY

HAVING

创建分组

SELECT id, COUNT(*) AS num_ic
FROM goods
GROUP BY id;

GROUP BY要在WHERE之后,ORDER BY之前

过滤分组

WHERE是过滤行
HAVING是过滤分组
GROUP BY 后接HAVING

SELECT id, COUNT(*) AS orders
FROM goods
GROUP BY id
HAVING COUNT(*) >=2

下面是列出具有2个以上的、价格为10(含)以上的产品:

SELECT id, COUNT(*) AS num
FROM goods
WHERE price >= 10
GROUP BY id
HAVING COUNT(*) >=2

分组和排序

ORDER BYGROUP BY
排序产生的顺序分组行,但输出可能还是分组的顺序
任意列均能使用仅可能 使用选择列或表达式列
不一定需要如果与聚集函数一起使用,则必须使用

想要顺序一定要用ORDER BY

SELECT子句顺序

SELECT—>FROM—>WHERE—>GROUP BY—>HAVING—>ORDER BY—>LIMIT

3.5 使用子查询

利用子查询进行过滤

SELECT cust_name, cust_contact
FROM customers
WHERE cust_id IN (SELECT cust_id
					FROM orders
					WHERE order_num IN  (SELECT order _num
										FROM orderitems
										WHERE pros_id='TNT2'));
										

实际使用时由于性能 的限制,不能嵌套太多的子查询

作为计算字段使用子查询

1.从customers表中检索客户的列表
2.对于 检索出的每个客户,统计其在order表中的订单数目

SELECT cust_name,
		cust_state
		((SELECT COUNT(*)
		  FROM orders
		  WHERE order.cust_id=customer.cust_id) AS orders
FROM customers
ORDER BY cust_name;										
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值