zoukankan      html  css  js  c++  java
  • LeetCode数据库习题182,595,620,175,183,181,596

    182.查找重复的电子邮箱

    编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。
    示例:
    +----+---------+
    | Id | Email   |
    +----+---------+
    | 1  | a@b.com |
    | 2  | c@d.com |
    | 3  | a@b.com |
    +----+---------+
    根据以上输入,你的查询应返回以下结果:
    +---------+
    | Email   |
    +---------+
    | a@b.com |
    +---------+
    说明:所有电子邮箱都是小写字母。
    

    解题:只要查找“邮箱出现次数大于1”的就是重复的电子邮箱。通过Email分组,再计算每组出现的次数

    select Email from Person group by Email having count(*) >1;
    

    595.大的国家

    这里有张 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      |
    +--------------+-------------+--------------+
    

    解题:满足两个条件中的任一个条件都可以,用or连接

    select name,population,area from World where area>3000000 or population>25000000;
    

    620.有趣的电影

    作为该电影院的信息部主管,您需要编写一个 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     |
    +---------+-----------+--------------+-----------+
    

    解题:影片描述为非boring并且id为奇数,用and连接两个条件;再进行降序排序order by rating desc

    select * from cinema where description !='boring' and id % 2 = 1 order by rating desc;
    

    175.组合两个表

    表1: Person
    +-------------+---------+
    | 列名         | 类型     |
    +-------------+---------+
    | PersonId    | int     |
    | FirstName   | varchar |
    | LastName    | varchar |
    +-------------+---------+
    PersonId 是上表主键
    表2: Address
    +-------------+---------+
    | 列名         | 类型    |
    +-------------+---------+
    | AddressId   | int     |
    | PersonId    | int     |
    | City        | varchar |
    | State       | varchar |
    +-------------+---------+
    AddressId 是上表主键
    编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
    FirstName, LastName, City, State
    

    解题:用左连接两表

    select FirstName,LastName,City,State from Person left join Address on Person.PersonId = Address.PersonId;
    

    183.从不订购的客户

    某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。
    Customers 表:
    +----+-------+
    | Id | Name  |
    +----+-------+
    | 1  | Joe   |
    | 2  | Henry |
    | 3  | Sam   |
    | 4  | Max   |
    +----+-------+
    Orders 表:
    +----+------------+
    | Id | CustomerId |
    +----+------------+
    | 1  | 3          |
    | 2  | 1          |
    +----+------------+
    例如给定上述表格,你的查询应返回:
    +-----------+
    | Customers |
    +-----------+
    | Henry     |
    | Max       |
    +-----------+
    

    解题:先在orders表中查找订购东西的客户,再从customers中查找不在订购东西的客户中的客户

    select Name Customers from Customers where id not in (select CustomerId from orders);
    

    181.超过经理收入的员工

    Employee 表包含所有员工,他们的经理也属于员工。每个员工都有一个 Id,此外还有一列对应员工的经理的 Id。
    +----+-------+--------+-----------+
    | Id | Name  | Salary | ManagerId |
    +----+-------+--------+-----------+
    | 1  | Joe   | 70000  | 3         |
    | 2  | Henry | 80000  | 4         |
    | 3  | Sam   | 60000  | NULL      |
    | 4  | Max   | 90000  | NULL      |
    +----+-------+--------+-----------+
    给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。
    +----------+
    | Employee |
    +----------+
    | Joe      |
    +----------+
    

    解题:先将表Employee 复制一份为表t,再根据Employee.ManagerId = t.Id将两表内连接,根据条件薪资查找员工

    select Employee.Name Employee from Employee join (Employee as t) on Employee.ManagerId = t.Id where Employee.salary > t.salary;
    

    596.超过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:
    学生在每个课中不应被重复计算。
    

    解题:先去除表中重复的数据,再对新表分组查询超过或等于5名学生的课

    select t.class from (select distinct * from courses) as t group by class having count(class) >= 5;
    
  • 相关阅读:
    存储数据的大小端模式
    双链表插入 删除详解
    php_match/preg_match_all 默认有字符串长度限制
    百度编辑器:获取编辑器的内容
    phalcon: update修改数据却变成了insert插入数据
    MySQL按照汉字的拼音排序,mysql汉字排序
    [转载]Eclipse提示No java virtual machine
    lhgdialog: iframe页面里面的,确定,关闭、取消按钮的操作
    js树目录结构
    mysql:恢复mysql表结构
  • 原文地址:https://www.cnblogs.com/863652104kai/p/11216449.html
Copyright © 2011-2022 走看看