一些复杂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)

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值