zoukankan      html  css  js  c++  java
  • 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 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,2)=1 And id=(SELECT COUNT(*) FROM seat) Then id
                when Mod(id,2)=1 Then id+1
                else id-1
           End) as id,student
    from seat order by id
  • 相关阅读:
    UVAlive3708 UVA1388 POJ3154 Graveyard【水题】
    UVALive5520 UVA305 POJ1012 HDU1443 Joseph【数学计算+打表】
    Go语言的素数对象编程实现及其使用
    Go语言实现的素数筛选程序
    Go语言的map以及sort
    封装统一数据验证方法
    项目开发中发布更新文档备注
    Asp.net Web Api开发Help Page 添加对数据模型生成注释的配置和扩展
    编写一个通用递归获取树形结构对象集合的方法
    使用AutoFac实现依赖注入(封装一个注册类)
  • 原文地址:https://www.cnblogs.com/baby123/p/10829890.html
Copyright © 2011-2022 走看看