我们在开发项目的时候,其实就是处理数据库,多线程。所以mysql需要了解很多。
可参考:
一些实用的MySql方法(持续更新)
1:DATE_FORMAT语法。
我们在mysql查询的时候。有的时候根据设置不同的时间格式,如你的create_time是“2020-11-26 10:10:10”改成“2020-11-26”这个时候,我们使用
select DATE_FORMAT(create_time, '%Y-%m-%d') from 表名
这样就可以了。如果我们根据小时来查询,如需要查询11:00 ,12:00,13:00这个小时维度。
DATE_FORMAT(create_time, '%H:00')
如果是年月日时分秒的话
DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%s')
特别说明的是:H表示24小时制度,h是12小时制度。 分钟是i 不是m
2:DIV语法 和 ceil语法。
我们在mysql查询的时候,有的时候需要除以一个固定的数。比如金额(amout)除以50
amout div 50
即可。
如果向上取整。则直接执行。
ceil(amout div 50)
3:COALESCE()
这个函数主要用来进行空值处理
如:COALESCE(字段A,0)
如果字段A是空值,则为0
4:group by 和order by以及max结合实现查找某个小时最大值
我们在查询完数据后,还需要排序下,这个时候就我们就需要使用group by 和order by这样就能取处group by 中的最大值并且排序
SELECT
x.time AS time,
x.hourTime AS hourTime,
Max(x.count) AS count
FROM
(
SELECT
sum(count) AS count,
DATE_FORMAT(
create_time,
'%Y-%m-%d %H:00'
) AS time,
DATE_FORMAT(create_time, '%H:00') AS hourTime
FROM
order_main
WHERE
pay_state = 1
AND date_sub(curdate(), INTERVAL 10 DAY) <= create_time
GROUP BY
time
ORDER BY
count DESC
) AS x
GROUP BY
hourTime
首先通过group by 实现按照(年月日时)分类然后按照order by实现大小排序,最后在外层在根据时间(小时)分类,并且通过Max()取最大值。
5:查询某个数据出现多次的情况(group by 和having)。
我们在数据库查找数据某一个数据出现多条,需要使用group by 和 having一起使用。
select page_name from page_record group by page_name HAVING count(page_name)>=2
6:CAST函数
有的时候我们在查询sql的时候需要将将原有的数据格式切换成其他的类型。
Cast(字段名 as 转换的类型 ),其中类型可以为:
CHAR[(N)] 字符型
DATE 日期型
DATETIME 日期和时间型
DECIMAL float型
SIGNED int
TIME 时间型
SELECT
cast(id AS SIGNED) AS id,
cast(phone_number as CHAR) as phone_number,
cast(MAX(promoter_code + 1) AS CHAR) AS maxCode
FROM
my table