
SQL
数据查询
静听山水
Just do it
展开
-
日志转拉链表
【代码】日志转拉链表。原创 2022-08-30 09:22:24 · 241 阅读 · 0 评论 -
count(*)和count(distinct *)
sql原创 2022-08-06 23:00:20 · 1319 阅读 · 0 评论 -
Null和三值逻辑
sql转载 2022-08-06 22:55:56 · 158 阅读 · 0 评论 -
ceil、lcase函数
sql原创 2022-08-06 22:53:09 · 342 阅读 · 0 评论 -
1285 Leetcode:找到连续区间的开始和结束数字
【代码】1285 Leetcode:找到连续区间的开始和结束数字。原创 2022-08-06 22:20:32 · 102 阅读 · 0 评论 -
Leetcode:180. 连续出现的数字-连续问题
sql原创 2022-08-06 22:11:26 · 162 阅读 · 0 评论 -
Leetcode:1225. 报告系统状态的连续日期-连续问题
sql转载 2022-08-06 21:57:15 · 243 阅读 · 0 评论 -
leetcode:618. 学生地理信息报告-行转列
sql转载 2022-08-06 21:23:13 · 253 阅读 · 0 评论 -
1127. 用户购买平台:union做维表
sql原创 2022-08-06 17:38:05 · 210 阅读 · 0 评论 -
关系模型:外键
sql转载 2022-07-24 13:06:06 · 1232 阅读 · 0 评论 -
mysql客户端工具
Navicat Premium 16.0.12 强大的数据库管理工具 - 精品MAC应用分享原创 2022-04-18 19:44:22 · 595 阅读 · 0 评论 -
null和空的区别
null可以替换为数值int型0,不可以替换为空;字符串可以替换为空,不可以替换为int型的数字0;原创 2021-12-12 16:34:44 · 843 阅读 · 0 评论 -
trunc和date_trunc的区别
总结通过对两个函数的测试,发现有如下特点:针对的字段类型不同:trunc是针对date类型处理,date_trunc是针对time_stamp类型处理;如果输入的时候不是对应的类型,会自动用cast函数处理; 参数的位置:trunc的参数在后面,date_trunc的参数在前面; 仅从个人练习的情况看,trunc的用法比date_trunc少些,因为trunc到date级别,date_trunc到time_stamp级别,所以以后可以多用date_trunc和sub_str基本能够解决绝大部分需原创 2021-12-12 14:33:03 · 10813 阅读 · 2 评论 -
用hql求每天同时最大在线人数
用hql求每天同时最大在线人数_大数据吧唧吧唧-优快云博客最近划水刷京东面试题,遇到一个看似简单的手写hql,大概题意如下:给定一个表event_log,字段有date,timestamp,event_name(只有login、logout两种),user_id。用hql求每天同时最大在线人数细细琢磨,此题不简单!难度在于求的是同时在线的人数,而不是每天在线人数。https://blog.youkuaiyun.com/qq_40713537/article/details/114096931?utm_medium=d转载 2021-10-11 19:06:25 · 226 阅读 · 0 评论 -
max函数比较字符串类型
原创 2021-07-25 12:45:45 · 1185 阅读 · 0 评论 -
coalesce
学习链接:https://www.cnblogs.com/sakura3/p/12150232.htmlselect coalesce(a.dt, b.stat_date, c.dt) dtselect coalesce(null, null, null);-- Return nullselect coalesce(1, null, null);-- Return 1select coalesce(null, 1, null);-- Return 1..原创 2021-05-09 13:44:18 · 235 阅读 · 0 评论 -
MySQL中TIMESTAMPDIFF和DATEDIFF函数的区别
下面说的前面减去后面,或者后面减去前面的意思是这样操作,结果是正数,如果将两个时间换个位置,将得到一个负数的结果。简记一下:D--大的前(大的时间在前)T---大的后(大的时间在后)1、TIMESTAMPDIFF:后面的时间减去前面的时间SELECT-- 时间相差不到24小时不算一天 timestampdiff(DAY,'2020-02-25 00:00:00','2020-02-26') day1, -- 1timestampdiff(DAY,'2020-02-25 00:0原创 2020-10-16 09:42:38 · 2481 阅读 · 0 评论 -
SQL知识体系
原创 2020-10-14 22:47:05 · 340 阅读 · 0 评论 -
sql分任意区间统计频数
用excel生成随机数,然后导入mysqlselect count(case when scores>=90 and scores<=100 then id end) as "[90,100]",count(case when scores>=80 and scores<=89 then id end) as "[80,89]",count(case when scores>=70 and scores<=79 then id end) as "[70,原创 2020-10-14 22:05:30 · 2151 阅读 · 0 评论 -
sql中any,some,in,not in
准备两个表:T1(2,3),T2(1,2,3,4)all:在T2表中查询比T1表中所有id都大的id;select * from T2 where id>all (select id from T1)any:在T2表中查询比T1表中任意一个id大的id;只需大于一个就可以select * from T2 where id>any(select id from T1)any,some是一样的结果,即父查询中的结果集大于子查询中任意一个结果集中的值,则为...原创 2020-10-02 19:05:32 · 645 阅读 · 0 评论 -
sql分组求中位数
Employee表包含所有员工。Employee表有三列:员工Id,公司名和薪水。Create table If Not Exists Employee (Id int, Company varchar(255), Salary int)Truncate table Employeeinsert into Employee (Id, Company, Salary) values ('1', 'A', '2341')insert into Employee (Id, Company, Sa...原创 2020-09-30 13:42:34 · 2324 阅读 · 0 评论 -
关于max()/min()和group by 的坑
请编写一个 SQL 查询,描述每一个玩家首次登陆的设备名称select player_id,device_id,min(event_date) from Activitygroup by player_id上面的运行结果是有问题的,player_id和min(event_date)是没有错误的,因为一个用于group by,一个在聚合函数min中,而device_id没有进行任何操作。你会发现数据对不上,第一行的device_id应该是1,而不是2。所以在不涉及player_i...原创 2020-09-30 11:15:40 · 1133 阅读 · 0 评论 -
197. 上升的温度
Create table If Not Exists Weather (Id int, RecordDate date, Temperature int)Truncate table Weatherinsert into Weather (Id, RecordDate, Temperature) values ('1', '2015-01-01', '10')insert into Weather (Id, RecordDate, Temperature) values ('2', '2015-...原创 2020-09-29 21:39:34 · 254 阅读 · 0 评论 -
184. 部门工资最高的员工
Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int)Create table If Not Exists Department (Id int, Name varchar(255))Truncate table Employeeinsert into Employee (Id, Name, Salary, DepartmentId) values ('1', ...原创 2020-09-29 20:55:32 · 109 阅读 · 0 评论 -
sql中变量的使用
总结:1.定义变量一般写在from语句之后,相当于在末尾定义变量2.定义变量一般都要取一个别名,比如这里的init,t1等3.变量在sql语句中表面上看只是个变量,但是从整个语句来看,它相当于一张表4.大多数有变量的sql语句中,都有order by。个人理解是:指定变量对原始数据的执行过程每次面对的是哪一行。如果少了这个order by,则可能会出现一些错误什么时候用@变量:目前我掌握的很浅,发现大家都基本在动态求和(累加)、排名中用。178. 分数排名 - 力扣(LeetCode原创 2020-09-06 11:51:41 · 8316 阅读 · 3 评论 -
sql中的各种排序
数据:178. 分数排名 - 力扣(LeetCode)Create table If Not Exists Scores (Id int, Score DECIMAL(3,2));Truncate table Scores;insert into Scores (Id, Score) values ('1', '3.5');insert into Scores (Id, Score) values ('2', '3.65');insert into Scores (Id, Score) val原创 2020-09-06 09:27:50 · 4603 阅读 · 0 评论 -
1212. 查询球队积分
select t.team_id,t.team_name,sum(case when m.host_goals > m.guest_goals then 3 when m.host_goals = m.guest_goals then 1 else 0 end) num_pointsfrom teams t left join(select host_team, guest_team, host_goals, guest_goalsfrom...原创 2020-09-05 14:09:11 · 292 阅读 · 0 评论 -
1204. 最后一个能进入电梯的人
电梯最大载重量为 1000。写一条 SQL 查询语句查找最后一个能进入电梯且不超过重量限制的 person_name 。题目确保队列中第一位的人可以进入电梯 。方法一:自连接我们需要根据 turn 排序, 并累加 weight,找到最后一个使得总和小于等于 1000 的 person_name。参照题目中的例子:true = 1, weight = 250, sum = 250true = 2, weight = 350, sum = 600true = 3, weight = 4..转载 2020-09-05 12:19:24 · 452 阅读 · 0 评论 -
1174. 即时食物配送 II
select sum(order_date = customer_pref_delivery_date) immediate_percentage from deliverywhere (customer_id, order_date) in(select customer_id, min(order_date)from delivery dgroup by customer_id)注意这里sum(order_date = customer_pref_delivery_date)...原创 2020-09-05 11:19:13 · 297 阅读 · 0 评论 -
1193. 每月交易 I
解题思路:这里trans_count,trans_total_amount是针对全部数据的,而approved_total_amount,approved_total_amount是针对部分的,所以就想着分别求出,然后根据字段month和country相同进行合并。所以写出来就成了下面的很麻烦的一段:select A.month,A.country,trans_count,approved_count,trans_total_amount,approved_total_amount f...原创 2020-09-05 10:31:24 · 194 阅读 · 0 评论 -
统计一列里包含另一列里有的数据频数情况
614. 二级关注者要理解group by之后的count的用法,count()里的是另外一列,所以count(distinct follower),记得加distinct,同一个关注者是不能被重复记的。select followee follower,count(distinct follower) numfrom followwhere followee in (select distinct follower from follow)group by followee.原创 2020-08-25 11:21:29 · 371 阅读 · 0 评论 -
608. 树节点
select id,case when t.p_id is null then 'Root' when t.id in (select p_id from tree ) then 'Inner' else 'Leaf' end as Typefrom tree t原创 2020-08-25 10:47:47 · 220 阅读 · 0 评论 -
power,square,sqrt等
SQL 开平方这里的(p1.x, p1.y) <> (p2.x,p2.y)很灵性,其实跟用concat一个道理select round(min(sqrt(power(p1.x-p2.x,2) + power(p1.y-p2.y,2))),2) shortestfrom point_2d p1, point_2d p2 where (p1.x, p1.y) <> (p2.x,p2.y)下面的是我写的,上面的是评论区的。写着写着容易陷入一些不好的习惯,其实...原创 2020-08-25 10:39:36 · 898 阅读 · 0 评论 -
group by concat
1050. 合作过至少三次的演员和导演select actor_id,director_idfrom ActorDirectorgroup by actor_id, director_idhaving count(*)>=3select actor_id, director_idfrom ActorDirectorgroup by concat(actor_id,',', director_id)having count(*) >= 3...原创 2020-08-24 21:42:01 · 385 阅读 · 0 评论 -
数字连续问题
select distinct c1.seat_idfrom cinema c1, cinema c2where abs(c2.seat_id-c1.seat_id)=1and c1.free=1 and c2.free=1order by c1.seat_id原创 2020-08-24 21:31:27 · 303 阅读 · 0 评论 -
mysql取前25%的数据
mysql:select g.* from (select @rownum:=0) r join ads g where (@rownum:=@rownum+1)<=(select round(count(*)*0.25) from ads);sql server:select top 25 percent * from student;转载 2020-08-24 16:02:31 · 2722 阅读 · 0 评论 -
512. 游戏玩法分析 II
512. 游戏玩法分析 II(player_id, event_date)这种两个字段限制的联合查询第一次见,记录下。注意主键描述。select player_id, device_idfrom activitywhere (player_id, event_date) in (select player_id, min(event_date)from activitygroup by player_id)...原创 2020-08-24 12:24:13 · 492 阅读 · 0 评论 -
1555. Bank Account Summary
很喜欢这道题,很贴合实际,主要分析的是在经过各种转账,入账后各银行账户的余额。select paid_by as user_id, -amount as trans from Transaction union all select paid_to as user_id, amount as trans from Transaction这一步很关键,思路真的很优秀。可以让数据按照user_id分类计算select Users.user_id .转载 2020-08-24 11:47:41 · 604 阅读 · 0 评论 -
无处不在的partition by
之前看到partition by在排名函数用过,也在sum函数里用过,这次又在case when里套用,学习了:select company_id,employee_id,employee_name, case when max(salary) over(partition by company_id)<1000 then salary when max(salary) over(partition by company_id) between 1000原创 2020-08-24 00:41:39 · 318 阅读 · 0 评论 -
登录连续问题
1454. 活跃用户 - 力扣(LeetCode)写一个 SQL 查询,找到活跃用户的 id 和 name,活跃用户是指那些至少连续5 天登录账户的用户,返回的结果表按照 id 排序.结果表格式如下例所示:常规思路会是如下的自连接:select id, namefrom Accountswhere id in ( select distinct a.id from Logins a, Logins b, Logins c, Logins d, Log...原创 2020-08-24 00:15:56 · 1253 阅读 · 3 评论