MYSQL 自定义变量用法收录

news2024/11/18 18:49:48

用户自定义变量使用:

  1. 优化排名语句

通过变量复制,快速实现类似行号功能

SET @rownum :=0 ;

SELECT school_id , school_name , @rownum :=@rownum+1 AS  rownum

FROM base_school WHERE school_id<0

LIMIT 10 ;

-- sql 排名

SET  @currcnt :=0 ,@precnt :=0, @rank :=0 ;

 

SELECT school_id ,

@currcnt := cnt AS cnt ,

@rank    := if(@precnt <> @currcnt , @rank+1 ,@rank ) AS rank ,

@precnt  := @currcnt dusum

FROM

(

SELECT school_id , COUNT(*) AS cnt

FROM base_student

GROUP BY school_id

ORDER BY  cnt DESC

) de ;

  1. 避免重复查询刚更新的数据

  1. 统计更新插入的数量

-- SQL 统计更新写入数量

INSERT  INTO  base_terminal_key( terminal_key,city_code ,exam_area_code)

VALUES('11cvt8ib8g' , '05' ,'0502'),('11cXX8ib8g' , '05' ,'0502'),('1cvDt8ib8g' , '05' ,'0502')

ON DUPLICATE KEY UPDATE

terminal_key =VALUES(terminal_key) + ( 0* (@ct :=@ct+1)) ;

  1. 确定取值顺序

参考地址: http://mysqldump.azundris.com/archives/86-Down-the-dirty-road.html

UNION 使用

假设需要编写union来实现第一个查询作为分支查询来先执行,找到了就跳过第二个分支,例如热用户数据得查询。

    -- 步骤3:生成顺序码,其中考生按照学校人数多到少、班级人数多到少、学校id、班级编号、考籍号 进行排序
        update base_examination_arrange_temp_room a 
        inner join (
                select sr.id ,sr.stud_exam_code, sr.school_cnt, sr.class_cnt,
                        if(@exam_place_code != sr.exam_place_code or @syllabus_code != sr.syllabus_code  , @num := 1, @num := @num+1) num ,
                        @exam_place_code := sr.exam_place_code exam_place_code,
                        @syllabus_code := sr.syllabus_code syllabus_code 
                from (           
                        select a1.id , a1.exam_place_code, a1.syllabus_code, a1.stud_exam_code, a1.class_code, a2.school_cnt, a3.class_cnt
                        from base_examination_arrange_temp_room a1
                        left join (
                                select school_id, exam_place_code, syllabus_code, count(school_id) school_cnt
                                from base_examination_arrange_temp_room
                                where examination_code=examinationCode  and exam_area_code=examAreaCode
                                group by school_id, exam_place_code, syllabus_code
                        ) a2 on a2.school_id=a1.school_id and a2.exam_place_code=a1.exam_place_code and a2.syllabus_code=a1.syllabus_code
                        left join (
                                select school_id, exam_place_code, syllabus_code, class_code, count(stud_exam_code) class_cnt
                                from base_examination_arrange_temp_room
                                    where examination_code=examinationCode and exam_area_code=examAreaCode
                                group by school_id,exam_place_code,syllabus_code,class_code
                        ) a3 on a3.school_id=a1.school_id and a3.exam_place_code=a1.exam_place_code and a3.syllabus_code=a1.syllabus_code and a3.class_code=a1.class_code
                        where a1.examination_code=examinationCode and a1.exam_area_code=examAreaCode
                        order by a1.exam_place_code,  a1.syllabus_code, a2.school_cnt desc, a3.class_cnt desc, a1.class_code, a1.stud_exam_code
                ) sr,
                (select @exam_place_code := '', @syllabus_code := '', @num := 0) b
        ) tp
        set a.order_num = tp.num
        where a.id=tp.id ;

    --  步骤4:按照考点+科目,把顺序码 分4段 
        update base_examination_arrange_temp_room a 
        inner join (
                select a.id, a.exam_place_code, a.syllabus_code, a.stud_exam_code,
                            t.maxOrderNum,
                            case
                                    when a.order_num <= t.divid1 then 1 
                                    when a.order_num <= t.divid2 then 2 
                                    when a.order_num <= t.divid3 then 3 
                                    else 4 
                            end section_flag 
                    from (select * from base_examination_arrange_temp_room where examination_code = examinationCode and exam_area_code = examAreaCode) a
                    left join (
                            select tt.*, 
                                    if(mod(tt.maxOrderNum, 4)!=0, tt.maxOrderNum*0.25+1,  tt.maxOrderNum*0.25) divid1, 
                                    if(mod(tt.maxOrderNum, 4)=3, tt.maxOrderNum*0.5+1, if(tt.maxOrderNum=5, tt.maxOrderNum*0.5+1, tt.maxOrderNum*0.5)) divid2, 
                                    if(mod(tt.maxOrderNum, 4)>1, tt.maxOrderNum*0.75+1, if(tt.maxOrderNum=5, tt.maxOrderNum*0.75+1, tt.maxOrderNum*0.75)) divid3
                            from (
                                select exam_place_code, syllabus_code, max(order_num) maxOrderNum 
                                from base_examination_arrange_temp_room 
                                where examination_code = examinationCode and exam_area_code = examAreaCode 
                                group by exam_place_code, syllabus_code 
                            ) tt
                    ) t on t.exam_place_code = a.exam_place_code and t.syllabus_code = a.syllabus_code                      
        )tp 
        set a.section_flag = tp.section_flag, random_num=floor(1 + rand() * tp.maxOrderNum)     
        where a.id = tp.id;

-- 步骤5:更新座位号
        -- 5.1 更新奇数座位                 
        update base_examination_arrange_temp_room  a 
        inner join (
                select id, 
                        if(@exam_place_code != a.exam_place_code or @syllabus_code != a.syllabus_code, @rn:=1, @rn := @rn+1) rn,
                        if(@exam_place_code != a.exam_place_code or @syllabus_code != a.syllabus_code, @room:=1, if(mod(@rn-1, 15) = 0, @room := @room+1, @room)) room,
                        if(@exam_place_code != a.exam_place_code or @syllabus_code != a.syllabus_code, @seat := 1, if(mod(@rn-1, 15) = 0, @seat := 1, @seat := @seat+2)) seat,
                        @exam_place_code := a.exam_place_code exam_place_code,
                        @syllabus_code := a.syllabus_code syllabus_code
                from base_examination_arrange_temp_room a,
                        (select @rn:=0, @room:=1, @seat:=-1, @exam_place_code := '', @syllabus_code := '') b
                where a.examination_code = examinationCode and a.exam_area_code = examAreaCode and a.section_flag in(1, 2)  
                order by a.exam_place_code, a.syllabus_code,  a.section_flag, a.random_num  
        ) b
        set a.room_no = b.room, a.seat_no =b.seat
        where a.examination_code = examinationCode and a.exam_area_code = examAreaCode and a.id = b.id;

        if(recode = '-8') then 
                set recode = '-84';
                set errMsg = '编排奇数座位号时失败。';        
                select recode, errMsg;
                leave label;    
        end if;        

        -- 5.2 更新偶数座位
        update base_examination_arrange_temp_room  a 
        inner join (
                select id, 
                        if(@exam_place_code != a.exam_place_code or @syllabus_code != a.syllabus_code, @rn:=1, @rn := @rn+1) rn,
                        if(@exam_place_code != a.exam_place_code or @syllabus_code != a.syllabus_code, @room:=1, if(mod(@rn-1, 15) = 0, @room := @room+1, @room)) room,
                        if(@exam_place_code != a.exam_place_code or @syllabus_code != a.syllabus_code, @seat := 2, if(mod(@rn-1, 15) = 0, @seat := 2, @seat := @seat+2)) seat,
                        @exam_place_code := a.exam_place_code exam_place_code,
                        @syllabus_code := a.syllabus_code syllabus_code
                from base_examination_arrange_temp_room a,
                        (select @rn:=0, @room:=1, @seat:=0, @exam_place_code := '', @syllabus_code := '') b
                where a.examination_code = examinationCode and a.exam_area_code = examAreaCode and a.section_flag in( 3, 4)  
                order by a.exam_place_code, a.syllabus_code, a.section_flag, a.random_num 
        ) b
        set a.room_no = b.room, a.seat_no =b.seat
        where a.examination_code = examinationCode and a.exam_area_code = examAreaCode and a.id = b.id;
                    
        if(recode = '-8') then 
                set recode = '-85';
                set errMsg = '编排偶数座位号时失败。';        
                select recode, errMsg;
                leave label;    
        end if;        

        -- 步骤6:更新小语种的考场号
        update base_examination_arrange_temp_room a
                inner join (
                        select t1.exam_place_code, 
                                t1.syllabus_code foreign_code,   
                                t1.cnt,
                                if(@exam_place_code != t1.exam_place_code, @total_cnt:=0, if(t1.syllabus_code='31', @total_cnt:=0,  @total_cnt:= @total_cnt + @cnt)) total_cnt,
                                @exam_place_code := t1.exam_place_code,
                                @cnt := t1.cnt
                        from (            
                                select a.exam_place_code, a.syllabus_code, count(distinct b.room_no) cnt
                                from (
                                        select p.exam_place_code , sy.syllabus_code  
                                        from  base_examination_place p, (select syllabus_code from base_syllabus where syllabus_code in ('31' ,'32', '33', '34', '35', '36')) sy  
                                        where p.examination_code=examinationCode and p.exam_area_code=examAreaCode
                                ) a 
                                left join  (
                                    select * 
                                    from base_examination_arrange_temp_room
                                    where exam_area_code=examAreaCode 
                                        and examination_code=examinationCode
                                        and syllabus_code in ('31', '32', '33', '34', '35', '36')
                                ) b ON  a.exam_place_code=b.exam_place_code and a.syllabus_code=b.syllabus_code
                                group by a.exam_place_code, a.syllabus_code
                        ) t1, (select @cnt:=0, @total_cnt:=0, @exam_place_code:='' ) t2
        ) b
        set a.room_no = a.room_no + b.total_cnt
        where a.examination_code = examinationCode 
            and a.exam_area_code = examAreaCode  
            and a.examination_code=examinationCode
            and a.syllabus_code in ('32', '33', '34', '35', '36') 
            and a.exam_place_code=b.exam_place_code 
            and a.syllabus_code=b.foreign_code;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在商场内进行导航?商场路线指引图怎么做?

如何在商场内进行导航&#xff1f;购物中心是多种零售店铺、服务设施集中在一个建筑物内或一个区域内&#xff0c;向消费者提供综合性服务的商业集合体。现在的购物中心面积都比较大&#xff0c;很多朋友的方向感明明不差&#xff0c;却每次都在商场遭遇“滑铁卢”&#xff0c;…

MaxCompute 发布智能物化视图,CU 算力节省 14%

作者&#xff1a;夏俊伟&#xff08;阿里云高级产品专家&#xff09;、郑君正&#xff08;阿里云高级技术专家&#xff09; 什么是物化视图 MaxCompute 物化视图是一种预先计算和存储结果数据的数据对象&#xff0c;也可以称之为“实体化视图”。物化视图可以作为一张虚拟表存…

输电线路测温工作要求

输电线路导线温度监测系统 一、产品描述&#xff1a; 在我国当前发展趋势下&#xff0c;电力的使用越来越庞大&#xff0c;对于供电系统的稳定性可靠性的考验越发严峻&#xff0c;智能化管理的推进必不可少&#xff0c;输电线路导线温度监测系统作为我司在线监测数据类产品&…

开源赋能 普惠未来|XuperCore诚邀您参与2023开放原子全球开源峰会

XuperCore&#xff08;待更名&#xff09;是百度自主研发&#xff0c;拥有完整知识产权的区块链底层技术XuperChain的内核&#xff0c;拥有620多篇区块链核心技术专利&#xff0c;以“高性能”、“开源”为主要设计目标&#xff0c;致力于创建“更快、更通用、更好用”的区块链…

JavaEE(系列13) -- 多线程(CAS)

目录 1. 什么是 CAS 2. CAS伪代码 3. CAS 的应用 3.1 实现原子类 3.2 实现自旋锁 4. CAS的ABA问题(面试常问) 4.1 ABA 问题 4.2 ABA问题解决方案 1. 什么是 CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“. 一个 CAS 涉及到以下操作&#xff1a; 我们假…

速卖通、阿里国际、shopee618盛典!提升订单销量的秘密武器—测评补单技术!

随着电子商务的迅速发展&#xff0c;网络购物已成为现代人生活中不可或缺的一部分。而在众多购物平台中&#xff0c;速卖通凭借其丰富多样的商品选择和优惠的价格政策&#xff0c;成为了全球消费者的首选之一。尤其是每年的618盛典&#xff0c;更是吸引了大量消费者的目光。然而…

【CH32】| 01——新建工程 | 下载 | 运行 |调试

系列文章目录 【CH32】| 00——开发环境搭建 【CH32】| 01——新建工程 | 下载 | 运行 |调试 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 1. 新建工程1.1 基于官方IDE [MounRiver Studio]1.1.1 使用官方内置的工程模板新建1.1.2 使用自定义工程模板新建1.1.2.1 新建自…

会声会影2023最新版本剪辑视频的方法和步骤

想要学剪辑&#xff0c;剪辑软件是基础。如果大家是零基础的话&#xff0c;建议大家选择一款入门级的剪辑软件&#xff0c;比如说会声会影。这款软件功能强大、操作简单&#xff0c;而且会声会影中文网站首页有很多剪辑教程供大家学习参考。会声会影在用户的陪伴下走过23余载&a…

计算机图形学 | 实验十二:混合(透明物体处理)

计算机图形学 | 实验十二&#xff1a;混合&#xff08;透明物体处理&#xff09; 计算机图形学 | 实验十二&#xff1a;混合&#xff08;透明物体处理&#xff09;混合&#xff08;Blending&#xff09;开启混合和设置混合模式绘制顺序排序透明物体绘制实验结果 华中科技大学《…

IPO观察丨德尔玛上市,“极致单品”模式的一场胜利

近日&#xff0c;创新电器品牌德尔玛&#xff08;广东德尔玛科技股份有限公司&#xff0c;代码“301332”&#xff09;&#xff0c;正式登陆深圳证券交易所创业板&#xff0c;发行价格为14.81元/股。上市前&#xff0c;德尔玛已完成了5亿元A轮融资及3.3亿元A轮融资&#xff0c;…

Linux Ubuntu配置CPU与GPU版本tensorflow库的方法

本文介绍在Linux操作系统的发行版本Ubuntu中&#xff0c;配置可以用CPU或GPU运行的Python新版本深度学习库tensorflow的方法。 在文章Anaconda配置Python新版本tensorflow库&#xff08;CPU、GPU通用&#xff09;的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/ar…

Elasticsearch 7.x 基本操作 (CRUD)

1.概述 Elasticsearch 是一个流行的开源搜索引擎&#xff0c;用于存储、搜索和分析数据。下面是 Elasticsearch 7.x 版本的基本操作&#xff08;CRUD&#xff09;&#xff1a; 1、创建索引&#xff1a; PUT /index_name {"settings": {"number_of_shards"…

最近公司招了一个华为拿30K出来的,真是砂纸擦屁股,给我露了一手....

今年的金三银四已经结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山…

【C++】位图(海量数据处理)

文章目录 抛出问题:引入位图位图解决 位图的概念位图的实现结构构造函数设置位清空位判断这个数是否存在反转位size与count打印函数 位图的应用 抛出问题:引入位图 问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排序&#xff0c;给一个无符号整数&#xff0c;如何…

基于 MapReduce 的分布式计算系统

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 本文以 MapReduce 为基础&#xff0c;实现了一套基于浏览器实现的分布式系统。加之如今 Chrome 对各个平台近乎完美的兼容性&#xff0c;实现了一次编写&#xff0c;处处运行的目标。同时得力于个人移动设备的普及&#xff0c…

java云HIS系统源码 医院HIS管理系统源码 Java医院系统源码 SaaS医院his系统源码

技术框架&#xff1a; 1、前端&#xff1a;AngularNginx 2、后台&#xff1a;JavaSpring&#xff0c;SpringBoot&#xff0c;SpringMVC&#xff0c;SpringSecurity&#xff0c;MyBatisPlus&#xff0c;等 3、数据库&#xff1a;MySQL MyCat 4、缓存&#xff1a;RedisJ2Cac…

day6 - 使用图像运算进行图像美化

本期将了解图像的基础运算&#xff0c;包含算数运算和位运算等。我们所使用的图像处理技术其实都是靠一些简单的基础运算来完成的&#xff0c;例如加法运算、位运算等&#xff0c;这些简单运算是我们后续研究更复杂的图像处理的基础。 完成本期内容&#xff0c;你可以&#xf…

HiveSQL基础练习题

HiveSQL基础练习题 1.环境准备1.1建表语句1.2数据准备1.3插入数据 2.查询2.1 查询姓名中带“华”的学生名单2.2 查询姓“王”老师的个数2.3 检索课程编号为“04”且分数小于60的学生学号&#xff0c;结果按分数降序排列2.4 查询语文成绩 < 90分的学生和其对应的成绩&#xf…

day16 Servlet交互作用域ELJSTL

转发和重定向 **作用:**为了让jsp和servlet做到责任分离,用于web组件的跳转 **web组件:**jspservlet 转发的方法 request.getRequestDispatcher("跳转的地址").forward(request,response)**跳转的位置:**在服务端进行跳转 重定向的方法 response.sendRedirect(…

2.9 playwright之python实现

1、目录结构如下 2、main.py import os import shutilfrom playwright.sync_api import sync_playwright from config.setting import config from utils.template import Template from utils.md5 import Md5 from utils.delete import del_files import pytest from utils.d…