ღゝ◡╹)ノ❤️

集中一点,登峰造极!

  menu
138 文章
0 浏览
0 当前访客
ღゝ◡╹)ノ❤️

sql刷题

最近面试当中有考到sql的,但没有答上来,所以去leetcode刷了一下sql,不得不说,sql里面还是有很多知识点的。

我是开了一个sql专栏进行学习的。

image.png

第一天

第一天基本毫无压力

前三道题就是简单的添加where条件,第四道用到了in关键字。

in关键字一般这样用:列明 in 集合(一般是select的集合)

第二天

第二天用到了不熟悉的语句

比如case when

image.png

第三天

第三天遇到了很多函数,比如:

concat(),Upper(),left,Lower(),substring(),group_concat()

不知道的函数的查询可以用这个网站链接🔗

第四天

遇到一个好玩的题型,列转行和行转列:

【总结】
行列转换就是如下图所示两种展示形式的互相转换:
(上表/行表:student1;下表/列表:student2)

未命名图片.png

【行转列——MAX/SUM+CASE WHEN+GROUP BY】

SELECT name,
MAX(CASE WHEN subject='语文' THEN score ELSE 0 END) AS "语文",
MAX(CASE WHEN subject='数学' THEN score ELSE 0 END) AS "数学",
MAX(CASE WHEN subject='英语' THEN score ELSE 0 END) AS "英语"
FROM student1
GROUP BY name
【列转行——MAX+UNION+GROUP BY】

SELECT NAME,'语文' AS subject,MAX("语文") AS score
FROM student2 GROUP BY NAME
UNION
SELECT NAME,'数学' AS subject,MAX("数学") AS score
FROM student2 GROUP BY NAME
UNION
SELECT NAME,'英语' AS subject,MAX("英语") AS score
FROM student2 GROUP BY NAME

还有一个就是用求两个表中,只出现一次的值:

select employee_id 
from
(
    select employee_id from Employees
    union all
    select employee_id from Salaries
) as em
group by employee_id
having count(employee_id) = 1
order by employee_id

思路是先用union all将所有的值连接在一起,然后用group by分一下组,然后挑选只出现一行的。

第五天

一些连接查询,比较easy。

第六天

简单查询,子查询,比较easy

第七天

总结一下关于时间计算的方式

sql语句计算时间差

SELECT DATEDIFF('2008-8-30','2008-12-29') AS 时间差

在这里插入图片描述

sql语句 转化时间为指定的格式

select DATE_FORMAT(NOW(),'%m-%d-%Y')

在这里插入图片描述

计算两个日期的时间差

between '2019-06-28' and '2019-07-28'

第八天

主要是考察的group by,找到分组里最大的一个就是这样:

select user_id,max(time_stamp) as last_stamp        
from Logins 
where date_format(time_stamp,"%Y") =2020 
group by user_id

标题:sql刷题
作者:哇哇哇哇
地址:https://wuxiangshi.vip/articles/2022/06/05/1654420475322.html