mysql查询人口最多的5个国家_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) = 1

说明:

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,2) 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)>=5

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>3000000 or population>25000000

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 THENresultWHEN condition THENresult

.............[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,2)=1 And id=(SELECT COUNT(*) FROM seat) Then id

when Mod(id,2)=1 Then id+1

else id-1End)asid,studentfrom seat order by id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值