optimize.md

July 18, 2020 · View on GitHub

[[toc]]

需求1: 最近写的一个用户数据统计相关接口,需要用到按照每天进行分组统计。

直接看语句

SELECT DATE_FORMAT( create_time, "%Y-%m-%d" ) ,sum(user_id) FROM orders WHERE order_state=2 GROUP BY DATE_FORMAT( create_time, "%Y-%m-%d" ) ;

DATE_FORMAT函数说明

  • 语法
DATE_FORMAT(date,format)

//上面代码中使用的是
DATE_FORMAT( create_time, "%Y-%m-%d" )

date 参数是合法的日期。format 规定日期/时间的输出格式。

  • format可以使用的格式
格式描述
%a缩写星期名
%b缩写月名
%c月,数值
%D带有英文前缀的月中的天
%d月的天,数值(00-31)
%e月的天,数值(0-31)
%f微秒
%H小时 (00-23)
%h小时 (01-12)
%I小时 (01-12)
%i分钟,数值(00-59)
%j年的天 (001-366)
%k小时 (0-23)
%l小时 (1-12)
%M月名
%m月,数值(00-12)
%pAM 或 PM
%r时间,12-小时(hh:mm:ss AM 或 PM)
%S秒(00-59)
%s秒(00-59)
%T时间, 24-小时 (hh:mm:ss)
%U周 (00-53) 星期日是一周的第一天
%u周 (00-53) 星期一是一周的第一天
%V周 (01-53) 星期日是一周的第一天,与 %X 使用
%v周 (01-53) 星期一是一周的第一天,与 %x 使用
%W星期名
%w周的天 (0=星期日, 6=星期六)
%X年,其中的星期日是周的第一天,4 位,与 %V 使用
%x年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y年,4 位
%y年,2 位

> 需求2: 查询结果单位换算后保留两位小数

数据库表中sale列的值为23456.789

  1. format函数

说明:format(x,d)是mysql自带的格式化小数函数,format()函数会对小数部分进行四舍五入操作,整数部分从右向左每三位一个逗号进行格式化输出

format函数结果:

23,456.79
  1. truncate函数

说明:truncate(x,d)是mysql自带的函数,truncate()函数会将小数部分d位以后的值直接舍去

truncate函数结果:

23456.78
  1. round函数(常用)

说明:round(x,d)是mysql自带的函数,format()函数会对小数部分进行四舍五入操作,但是不会出现format函数中的带逗号格式

round函数数结果:

23456.79
  1. convert函数(常用)

说明:MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。简单的说就是类型转换。 CONVERT(xxx,类型),但是类型是有限制的,下面几种类型

  • 二进制,同带binary前缀的效果 : BINARY
  • 字符型,可带参数 : CHAR()
  • 日期 : DATE
  • 时间: TIME
  • 日期时间型 : DATETIME
  • 浮点数 : DECIMAL
  • 整数 : SIGNED
  • 无符号整数 : UNSIGNED

根据文初给出的数据,应该是这些写

convert(23456.789,decimal(10,2));

convert函数数结果,这里也是四舍五入:

23456.79

注:解释下dem的意思

DECIMAL(10,2) 总共能存10位数字,末尾2位是小数,字段最大值99999999.99(小数点不算在长度内)