mysql查询之上升的温度,有趣的电影,超过5名学生的课,大国,反转性别, 换座位
最近发现一个网站 力扣 查看
上面有很多算法和数据库的题目,做了一下,发现自己平时都疏忽了,因此边做边记录下来
1.上升的温度
给定一个 Weather
表,编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 Id。
+---------+------------------+------------------+
| Id(INT) | RecordDate(DATE) | Temperature(INT) |
+---------+------------------+------------------+
| 1 | 2015-01-01 | 10 |
| 2 | 2015-01-02 | 25 |
| 3 | 2015-01-03 | 20 |
| 4 | 2015-01-04 | 30 |
+---------+------------------+------------------+
例如,根据上述给定的 Weather
表格,返回如下 Id:
+----+
| Id |
+----+
| 2 |
| 4 |
+----+
select a.Id from Weather a,Weather b where a.Temperature>b.Temperature and datediff(a.RecordDate,b.RecordDate) =
说明:
DATEDIFF(expr,expr2)
起始时间 expr和结束时间expr2之间的天数
2.有趣的电影
需要编写一个 SQL查询,找出所有影片描述为非 boring
(不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating
排列
例如,下表 cinema
:
+---------+-----------+--------------+-----------+
| id | movie | description | rating |
+---------+-----------+--------------+-----------+
| 1 | War | great 3D | 8.9 |
| 2 | Science | fiction | 8.5 |
| 3 | irish | boring | 6.2 |
| 4 | Ice song | Fantacy | 8.6 |
| 5 | House card| Interesting| 9.1 |
+---------+-----------+--------------+-----------+
对于上面的例子,则正确的输出是为:
+---------+-----------+--------------+-----------+
| id | movie | description | rating |
+---------+-----------+--------------+-----------+
| 5 | House card| Interesting| 9.1 |
| 1 | War | great 3D | 8.9 |
+---------+-----------+--------------+-----------+
select * from cinema where description!='boring' and mod(id,) order by rating desc
说明:
mod(numer1,number2)
返回的值为其余数值
3.超过5名学生的课
有一个courses
表 ,有: student (学生) 和 class (课程)。
请列出所有超过或等于5名学生的课。
例如,表:
+---------+------------+
| student | class |
+---------+------------+
| A | Math |
| B | English |
| C | Math |
| D | Biology |
| E | Math |
| F | Computer |
| G | Math |
| H | Math |
| I | Math |
+---------+------------+
应该输出:
+---------+
| class |
+---------+
| Math |
+---------+
Note:
学生在每个课中不应被重复计算。
select class from courses group by class having count(DISTINCT STUDENT)>=
4.大国
World
表
+-----------------+------------+------------+--------------+---------------+
| name | continent | area | population | gdp |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan | Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
+-----------------+------------+------------+--------------+---------------+
如果一个国家的面积超过300万平方公里,或者人口超过2500万,那么这个国家就是大国家。
编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
例如,根据上表,我们应该输出:
+--------------+-------------+--------------+
| name | population | area |
+--------------+-------------+--------------+
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
+--------------+-------------+--------------+
select name,population,area from World where area> or population>
5.反转性别
给定一个 salary
表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | m | 2500 |
| 2 | B | f | 1500 |
| 3 | C | m | 5500 |
| 4 | D | f | 500 |
运行你所编写的更新语句之后,将会得到以下表:
| id | name | sex | salary |
|----|------|-----|--------|
| 1 | A | f | 2500 |
| 2 | B | m | 1500 |
| 3 | C | f | 5500 |
| 4 | D | m | 500 |
update salary set sex= (case when sex='m' then 'f' else 'm' end)
说明:
CASE WHEN condition THEN result WHEN condition THEN result .............
[WHEN ...]
[ELSE result]
END
CASE 子句可以用于任何表达式可以有效存在的地方。condition 是一个返回boolean 的表达式。
如果结果为真,那么 CASE 表达式的结果就是符合条件的 result;
如果结果为假,那么以相同方式搜寻任何随后的 WHEN 子句;
如果没有 WHEN condition 为真,那么 case 表达式的结果就是在 ELSE 子句里的值;
如果省略了 ELSE 子句而且没有匹配的条件, 结果为 NULL
6.换座位
seat
表,用来储存学生名字和与他们相对应的座位 id
其中纵列的 id 是连续递增的
想要改变相邻俩学生的座位,写一个 SQL query 来输出结果
示例:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Abbot |
| 2 | Doris |
| 3 | Emerson |
| 4 | Green |
| 5 | Jeames |
+---------+---------+
假如数据输入的是上表,则输出结果如下:
+---------+---------+
| id | student |
+---------+---------+
| 1 | Doris |
| 2 | Abbot |
| 3 | Green |
| 4 | Emerson |
| 5 | Jeames |
+---------+---------+
注意:
如果学生人数是奇数,则不需要改变最后一个同学的座位。
select (Case
when Mod(id,)= And id=(SELECT COUNT(*) FROM seat) Then id
when Mod(id,)= Then id+
else id-
End) as id,student
from seat order by id
最新文章
- “CEPH浅析”系列之八——小结
- MongoDB的索引(三)
- 【故障处理】mysql出现大量slave bin日志,将磁盘空间占满
- android通知栏Notification点击,取消,清除响应事件
- Singleton<;T>;
- (转载)Excel文档保存的时候,提示“文档未保存”
- jQuery的延迟对象
- eclipse开发servlet应用,Tomcat无法访问jpg图片
- Linux shell入门基础(一)
- Strange Towers of Hanoi
- mysql建表设置两个默认CURRENT_TIMESTAMP的技巧
- ios 获得版本号
- C#中窗体的close,dispose,以及application.exit()的区别
- 云服务器挂载/dev/vdb1磁盘
- SpringBoot 试手(简易的SpringBoot搭建步骤)
- 熟记这些git命令,你就是大神
- CM记录-CDH故障修复处理记录
- 5月14日 绿城育华NOIP巨石杯试卷解析
- Homebrew 的安装方法(官方的方法老师安装失败) 第三方
- POJ1845:Sumdiv(求因子和+逆元+质因子分解)好题
热门文章
- 实现批量添加10个用户,用户名为user01-10,密码为user后面跟3个随机字符
- SSH——ssh_exchange_identification: read: Connection reset by peer
- Spark数据倾斜解决方案(转)
- Centos7安装Hadoop2.7
- 决策树——ID3
- 微信H5中禁止分享好友及分享到朋友圈的方法
- git的搭建和使用
- 通过USB 2.0电缆手动设置内核模式调试
- TimescaleDB1.3 的新特性——Continuous aggregates: faster queries with automatically maintained materialized views
- codevs 1814 最长链题解