数据库
首页 > 数据库> > 一些复杂sql语句总结

一些复杂sql语句总结

作者:互联网

1.根据某一个字段分组后再从这些数据中区某个条件中最大的或者最小的。

例如:在展示聊天简版列表时要按照最新聊天的人的最新的聊天内容查看

select * from zp_user_message a 
RIGHT JOIN (select MAX(gmt_create) gmt_create from zp_user_message 
where receive_user_id = 724 and GROUP BY send_user_id) b 
on a.gmt_create = b.gmt_create 
where receive_user_id = 724

2.两个关联表将其中一个表的字段数据同步更新到另一个表的相同字段中

update zp_message_subscription set type =
 (select type from zp_message where zp_message_subscription.message_id = zp_message.id)

3.将表中某个字段更新为null

update zp_message set cur_id is null

4.查询某个字段符合某个条件值的数据

如:查询状态为待支付的订单个数

select count(a.status=1 or null) from sale

5.在sql语句中保留小数

convert(t/100,decimal(10,2))

6.按照年月日查询数据

例如查询2010-01月份的订单信息

select sum(order_total_actual) 
from zp_order_sale zs 
where DATE_FORMAT(zs.gmt_create,'%Y-%m') = '2020-01' 

7.按照主键批量更新或者插入数据

replace into zp_report_xbuy(id,buyer_id,sys_id,user_type) 
select md5(concat(id,UNIX_TIMESTAMP('2018-04-19'))),id,pid,user_type from zp_user 

update zp_report_xbuy zr right join 
(
 select md5(concat(user_id,UNIX_TIMESTAMP('2019-11-25'))) id, count(user_id) visit_num from zp_log_sys zs left join zp_user zu on zu.id = zs.user_id
 where zu.user_group = 1 group by user_id
) zb on zr.id = zb.id set zr.visit_num = zb.visit_num

8.查询在某个时间段内的数据 

select count(*) from zp_log_sys where  UNIX_TIMESTAMP(gmt_create) between UNIX_TIMESTAMP('2019-12-28 00:00:00') and UNIX_TIMESTAMP('2019-12-28 23:59:59')

该事件参数可以是Date类型也可以是字符串类型

9.某几个字段拼接的数据

concat(year,'-',month,'-',day)

10.截取某个字段的其中一部分

SUBSTR(name,1,5)

 

small菜鸟的博客 发布了91 篇原创文章 · 获赞 21 · 访问量 5万+ 私信 关注

标签:语句,总结,user,sql,message,zp,id,select,gmt
来源: https://blog.csdn.net/jia1506/article/details/103939212