此处是leetcode上免费题目及答案,如有错误,欢迎指出,共同学习。
给定一个 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')
)
小美是一所中学的信息科技老师,她有一张 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%的用户
某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 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%的用户
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 # 尤其注意括号的问题,关系到条件的并列选择
有一个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
这里有张 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