sql中变量的使用

1、

sql中变量的使用_古杜且偲的博客-CSDN博客_sql使用变量总结:1.定义变量一般写在from语句之后,相当于在末尾定义变量2.定义变量一般都要取一个别名,比如这里的init,t1等3.变量在sql语句中表面上看只是个变量,但是从整个语句来看,它相当于一张表4.大多数有变量的sql语句中,都有order by。个人理解是:指定变量对原始数据的执行过程每次面对的是哪一行。如果少了这个order by,则可能会出现一些错误什么时候用@变量:目前我掌握的很浅,发现大家都基本在动态求和(累加)、排名中用。178. 分数排名 - 力扣(LeetCodehttps://blog.csdn.net/qq_41081716/article/details/108428687

2、

SQL变量的使用(自定义变量)_卖山楂啦prss的博客-CSDN博客_sql定义变量文章目录一、系统变量1.1 全局变量1.2 会话变量二、自定义变量(重点)2.1 用户变量①声明并初始化②赋值(更新变量的值)③使用(查看变量的值)★2.2 局部变量三、案例3.1 案例13.2 案例2四、用户变量和局部变量的对比一、系统变量说明:变量由系统定义,不是用户定义,属于服务器层面注意:全局变量需要添加GLOBAL关键字,会话变量需要添加SESSION关键字,如果不写,默认会话级别使用步骤查看所有系统变量SHOW GLOBAL VARIABLES;#全局变量SHOW SES.https://blog.csdn.net/qq_42374697/article/details/115278081

3、排序窗口函数的实现

--    创建表
Create table  Scores (Id int, Score DECIMAL(3,2));
--    插入数据
insert into Scores (Id, Score) values ('1', '3.5');
insert into Scores (Id, Score) values ('2', '3.65');
insert into Scores (Id, Score) values ('3', '4.0');
insert into Scores (Id, Score) values ('4', '3.85');
insert into Scores (Id, Score) values ('5', '4.0');
insert into Scores (Id, Score) values ('6', '3.65');



-- row_	number() 的实现
select score , (@i:=@i+1) as rank2 from Scores,(select @i:=0) init 
order by score desc;

-- dense_rank() 的实现
select 
    Score, 
    @i := @i + (@pre <> ( @pre := Score)) Rank1
from 
    Scores, 
    (select @i := 0,@pre := -1) init 
order by Score desc;

-- rank() 的实现
select a.*, if((lag(score,1) over())=a.score,lag(a.rank2,1) over(),a.rank2) as "rank_sx" 
from (
select score , (@i:=@i+1) as rank2 from Scores,(select @i:=0) init 
order by score desc)a

4、SQL查询至少连续七天下单的用户

 

-- 第一步,先排序
select *,row_number() over(partition by id order by date) 排名 from orde;

-- 第二步,求时间差后,得到的时间是否一致。
-- mysql 日期减去数字_MySQL日期加减函数详解
-- https://blog.csdn.net/weixin_32836713/article/details/114802370
select *, left(subdate(date,排名),10) rnk  from(select *,row_number() over(partition by id order by date) 排名 from orde)a

-- 第三步,求通过分组求连续登陆的天数值
select id,date,count(*) as t_num from (select *, left(subdate(date,排名),10) rnk  from(select *,row_number() over(partition by id order by date) 排名 from orde)a)b GROUP BY id,rnk

-- 第四步,求连续登陆7的id号和第一次登陆的日期。(一个用户有可能两次满足条件,连续登陆7天)
select id , date from(
select id,date,count(*) as t_num from (select *, left(subdate(date,排名),10) rnk  from(select *,row_number() over(partition by id order by date) 排名 from orde)a)b GROUP BY id,rnk)c
where c.t_num>6

-- 方法2()
-- 还可以直接进行筛选:
select id,rnk from
(select *, left(subdate(date,排名),10) rnk from (select *,row_number() over(partition by id order by date) 排名 from orde) a) b group by id,rnk having count(*)>6;

-- 下面是文章的来源
-- https://www.niceym.com/34877.html
-- https://www.bbsmax.com/A/8Bz8VbOX5x/

5、hivesql中datediff,date_add和date_sub的用法

         hivesql中datediff,date_add和date_sub的用法_香山上的麻雀1008的博客-CSDN博客

         https://blog.csdn.net/weixin_32836713/article/details/114802370

6、

7、

8、

9、

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值