【LeetCode数据库】题目总结——小技巧

前言

这段时间,刷掉了LeetCode的数据库简单题目,挺有感触的。在刷这些题之前,我只写过一般的增删改查,尤其是查询操作,使用的也不是很灵活,只知道最基本的用法。

去刷了题目之后真的学到了很多不论是新的知识点还是一些组合用法,总之对数据库操作尤其是dql的使用更加熟练了。学会这些小操作后,写sql头不疼了,腰不酸了,睡得着了,吃饭也更香了。

根据这54道题,我总结了一些常用的知识点、小技巧以及部分有代表性的题解。

这篇文章就来分享一些小技巧。也许不算技巧,或者只算是知识点的组合


多关键字排序

多关键字排序是很多时候都被要求的操作。在一开始了解到排序语句时就只了解到了通过某个字段排序,是单关键字排序。

面对多关键字排序的需求,一开始确实容易反应不过来,以为是什么新操作。

其实就是老树新花,在原来的排序语句中,使用逗号将多个排序字段隔开即可,每个字段后面还可以跟上各自的顺序。

学生们参加各科测试的次数

题目链接
这道题需要我们每个学生参与每场考试的次数

对于输出结果,有对顺序的需求,需要以学生id为第一关键字,科目名称作为第二关键字,升序排序

由于排序的默认顺序是升序,因此我们在制定指定排序关键字时可以省略排序顺序。

SELECT
    s.student_id,
    s.student_name,
    sb.subject_name,
    COUNT(e.student_id) AS attended_exams
FROM 
    Students s
    join Subjects sb
    LEFT JOIN Examinations e 
    on e.subject_name = sb.subject_name and e.student_id = s.student_id
GROUP BY
    s.student_id,sb.subject_name
ORDER BY
    s.student_id,sb.subject_name;

在group_concat中使用排序

group_concat是分组后常用的一个函数,他能将一个分组内的内容按照一定格式陈列出来。

在陈列内容的时候,往往有排序的需求,像是根据某某字段进行排序等等。

在group_concat中进行排序,只需要直接在所有陈列字段的后面写上排序规则即可,即order by 字段1 (desc),字段2 (desc)...

就像下面这道题:

按日期分组销售产品

题目链接
这个题目要求我们按照销售日期分组,分组后展示所有的销售商品,按照商品名称排序,就正好需要我们根据某个字段进行排序。

select
    sell_date,
    count(distinct product) as num_sold,
    group_concat(distinct product order by product) as products
from 
    activities
group by
    sell_date
;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值