leetcode力扣数据库SQL题目及解答(一)

此处是leetcode上免费题目及答案,如有错误,欢迎指出,共同学习。

文章目录

    • 627.交换工资(简单)
    • 627.换座位(中等)
    • 620.最有趣的电影(简单)
    • 601.体育馆的人流量(困难)
    • 596.超过5名学生的课(简单)
    • 595.大的国家(简单)

627.交换工资(简单)

给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。

注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。

题解:考察case when; update用法

update salary
set sex=(
    case when sex = 'f' then 'm'
         when sex = 'm' then 'f'
    end
)

或者 使用 if三元表达式

update salary
set sex=(
    if (sex='f','m','f')
)

627.换座位(中等)

小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。

其中纵列的 id 是连续递增的

小美想改变相邻俩学生的座位。

你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
题解:考察case when
思路:其实就是学生的id改变了,从这个角度出发思考

 select 
    case 
        when id%2=0 then id-1
        when id%2!=0 and id=(select count(*) as cnt from seat) then id
        else id+1
    end as id
    ,student
 from seat
 order by id asc

126 ms, 在所有 MySQL 提交中击败了95.49%的用户

620.最有趣的电影(简单)

某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

题解:考察where;order by(默认是升序)

# Write your MySQL query statement below
select * 
from cinema
where description != 'boring' and id%2 != 0
order by rating desc

105 ms, 在所有 MySQL 提交中击败了74.58%的用户

601.体育馆的人流量(困难)

X 市建了一个新的体育馆,每日人流量信息被记录在这三列信息中:序号 (id)、日期 (visit_date)、 人流量 (people)。

请编写一个查询语句,找出人流量的高峰期。高峰期时,至少连续三行记录中的人流量不少于100。

select distinct a.id,a.visit_date,a.people
from stadium as a,stadium as b,stadium as c
where a.people>=100 and b.people>=100 and c.people>=100
and (
    (a.id+1=b.id and a.id+2=c.id)
    or (a.id-1=b.id and a.id+1=c.id)
    or (a.id-2=b.id and a.id-1=c.id)
)
order by id # 尤其注意括号的问题,关系到条件的并列选择

596.超过5名学生的课(简单)

有一个courses 表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。

题解:考察group by ; having(分组之后再进行筛选)

# Write your MySQL query statement below
select class from courses
group by class
having count(distinct student)>=5

595.大的国家(简单)

这里有张 World 表,如果一个国家的面积超过300万平方公里,或者人口超过2500万,那么这个国家就是大国家。

编写一个SQL查询,输出表中所有大国家的名称、人口和面积。

题解:考察

select name, population,area
from world
where area>3000000 or population>25000000

看到别人用的一种做法,顺便复习一下:
UNION 操作符选取不同的值;
UNION ALL允许重复的值。

SELECT name, population, area
FROM world 
WHERE area > 3000000

UNION

SELECT name, population, area
FROM world
WHERE population > 25000000

你可能感兴趣的:(SQL,mysql,sql,leetcode,数据库)