.sql文件_Mysql分组排序及Sql文件执行

    最近在做一个临时项目,采用的是mysql开发,主要涉及两个问题:1.一个是传参问题;2.另一个是实现对数据分组取前4的数据。个人感觉很有意义,特此记录一下。

一.传参问题

    执行mysql文件,需要从外部传入参数时,mysql没有hive那么灵活,只有通过sed命令进行处理,比如有sql文件a.sql内容大致如下:

create table if not exists dp_collection.dc_sale_ztds_brand_base_week_info(

id INT  PRIMARY KEY AUTO_INCREMENT,

plan_id varchar(60)  default  null comment '智投方案id',

brand_name varchar(60)  default  null comment '品牌名称',

put_model varchar(60)  default  null comment '投放模式',

sign_city varchar(60)  default  null comment '签约城市',

start_date_w varchar(60)  default  null comment '当前经营周开始日期',

end_date_w varchar(60)  default  null comment '当前经营周结束日期',

logo_url varchar(500)  default  null comment '品牌logo图片',

lbs_url varchar(500)  default  null comment 'LBS固定图片',

word_cloud_url varchar(500)  default  null comment '词云固定图片',

insert_time datetime  default '1991-01-01 11:11:11' comment '入库时间',

update_time datetime   DEFAULT CURRENT_TIMESTAMP comment '更新时间'

)

comment='xxx';

truncate  table dp_collection.dc_sale_ztds_brand_base_week_info;

insert into dp_collection.dc_sale_ztds_brand_base_week_info(plan_id,brand_name,put_model,sign_city,start_date_w,end_date_w,logo_url,lbs_url,word_cloud_url,insert_time)

select 

t1.plan_id

,t1.brand_name

,t1.put_model

,t1.sign_city

,t2.j_wfirst_date as start_date_w

,t2.j_wend_date as end_date_w

,t1.logo_url

,t1.lbs_url

,t1.word_cloud_url

,now() as insert_time

from dp_collection.dc_sale_ztds_brand_base_info t1

left join  dp_collection.dim_date t2 on t2.`date`=@current_date;

    执行的命令大致如下:

sed -i "1 i\ set @current_date='$current_date';" ztds_brand_lanuch_info.sql

mysql -h1.1.1.1 -udp_collection -pxxxxxx -Ddp_collection

sed -i "1d" a.sql

    主要是先通过替换sql的变量,然后再还原的用法。

(ps:注意a.sql文件里面不能有中文,否则执行会报错)

二.mysql组内分组取数

     该sql主要是通过先查询出t1的数据,然后一条一条和where子查询里面的数据进行对比,取出每个分组中的前4条,这种用法感觉有点巧妙,

 sql文件内容:SELECT t1.plan_id,t1.launch_city FROM dp_collection.ztds_brand_city_info_tmp t1 WHERE 4>(SELECT COUNT(*) FROM dp_collection.ztds_brand_city_info_tmp 

WHERE plan_id=t1.plan_id  and plan_launch_point_num>t1.plan_launch_point_num) ORDER BY t1.plan_id,t1.plan_launch_point_num desc;

    通过explain查看,可以看出该语法的性能很差,后期可以考虑其他方式进行优化。

f67ddb5625eff83b870a5e3c768621fc.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值