mysql 日期时间拼接_《MySQL必知必会》学习笔记 4 简单数据处理

表中的数据一般不是应用程序直接需要的,为了效率,最好让mysql对查询结果进行一些处理和整理。

处理之后,对客户端来说,拿到的结果是没有区别的——它不能区分这是原始字段还是处理过的字段

1、计算字段

Concat |calc -AS

拼接时:Concat-RTrim(LTim)

098656dcf7fbacb340a087d65001e0ff.png

e91c62592ef96506388fdf3c67ab2c76.png

拼接和计算的结果是否符合预期,同样可以select测试:

51f9916af0c6bb1f398ad351931f99a1.png

2、使用函数

1)文本处理流函数Upper()Soundex()Right()Left()Length()

2)日期和时间处理函数Date()

where Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';
where Year(order_date) = 2005 AND Month(order_date) = 9;

3)数值处理函数 Abs() Pi() Cos()

4)聚集函数(不需要原始数据,而需要汇总数据)AVG()MAX()MIN()SUM()COUNT()

聚集函数除了基本用法,还有高级一点的:

  1. 只聚集不同的值(比如计算AVG时重复的数值只算1次)
  2. 组合聚集函数(在一条语句里使用多个基本聚集函数)
select AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id=1003;
SELECT COUNT(*) AS num_items,
    -> MIN(prod_price) AS price_min,
    -> MAX(prod_price) AS price_max,
    -> AVG(prod_price) AS price_abg
    -> FROM products;

函数移植性不如SQL。

1)

95d6b34ed3874b6863eaa7c1d86bdb3c.png
Upper()

783c5d443dd810519e04b72b95e75ade.png
Right()

75b28cbca39d2b740f5d62e56b58b791.png
Soundex()发音相同

2)日期和时间

310aaaedc750e238c21829818874bcc4.png
精确匹配

大多数时候并不能精确匹配,比如数据库里可能是日期+时间,于是只取日期或时间来匹配,并且配合Between and取范围:

6430f4890a357ee7da99de7dc6de8e90.png

但这个操作需要记得每个月有多少天,可以写作:

b932d43778ba150d8e3f340d1162a225.png

4)

f494e48372c2ebafaba388746d10867a.png
AVG()忽略NULL,不然怎么算呢?

f8f6d5152dd3a1dcfdd095d838bbbb50.png
COUNT(*)不忽略NULL,毕竟也是一条记录;但COUNT(字段)会忽略NULL,就是要求这个字段不为空

91dfc7a16bce7ca813a1bc1a30e12a27.png
MAX和MIN不仅处理数值,甚至可以处理文本,都会忽略NULL

e1c473f076e7be63ae72f50dda4a9bf4.png
SUM()不仅可以处理原生字段,还可以处理计算字段……对表中符合where的部分进行SUM,NULL当然是需要忽略的……

2b8a4fdfda3df954a236dd1559926c44.png
、只聚集不同的值

a89fc67641bb7fee4b7160439d01aef4.png
组合聚集函数:在一条语句里使用多个基本聚集函数

3、分组 与过滤分组

1)有一些需求是:返回每一 个供应商提供的产品数量?

GROUP BY 分组和HAVING过滤

aefb7f875f76ba17e12bf84111994a14.png
where vend_id=1003只能统计vend_id=1003这1个组的综合

2bedbf373fc94b79b950d18930ea22a3.png

ae6f4798a65610704cad24c74443ddec.png
WITH ROLLUP会在最后多得到一个分组的汇总

2)分组以后还有要求:列出至少有2个订单的顾客

这个需求首先要把订单按顾客进行分组,然后统计每个组的订单数量,如果满足>=2,则把这个组展示出来(过滤)

59d2ba44948e4037b7a6dcd17f88b505.png

where和having的区别:

where在分组前过滤,where过滤掉的东西不参与分组,having在分组后过滤。

3)列出具有2个以上价格10以上的产品的供应商:

68823d7b884e2448ecdef3ba40399afa.png
where在分组前进行过滤,where过滤掉的东西不参与分组,having在分组后进行过滤。

4)列出总计订单价格》=50的订单,要求订单号和总计订单价格:

按订单号分组,算出每个组的总计价格

对分组过滤,条件》=50

bf2d5e8edb163a8b1b5036352487fa1a.png

a26977caed738a5a5100fe16fe9d4f10.png
最可以加个排序

4、总结目前为止的SELECT字句的顺序:

SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY-LIMIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值