当前位置:   article > 正文

力扣SQL题集

力扣sql

1.组合两个表【leetcode175】

表1:Person

表2:Address

问题:编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息: FirstName, LastName, City, State

示例

  1. SELECT a.FirstName, a.LastName, b.City, b.State
  2. FROM Person AS a
  3. LEFT JOIN Address AS b
  4. ON a.PersonId = b.PersonId;

2.大的国家【leetcode595】

表:World

问题:如果一个国家满足下述两个条件之一,则认为该国是大国:

1.面积至少为 300 平方公里(3000000平方公里) 

2.人口至少为 2500 万(25000000)

编写一个 SQL 查询以报告大国的国家名称、人口和面积,按任意顺序返回结果表

示例

  1. SELECT name, population, area
  2. FROM World
  3. WHERE area >= 3000000 OR population >= 25000000;

3.超过5名学生的课【leetcode596】

表:Courses 

问题:编写一个SQL查询来报告至少有5个学生的所有课程,以任意顺序返回结果表

示例

  1. SELECT class
  2. FROM Courses
  3. GROUP BY class
  4. HAVING COUNT(student) >= 5;

4.有趣的电影【leetcode620】

表: cinema

问题:某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非boring(不无聊) 的并且id 为奇数的影片,结果请按等级rating排列

 对于上面的例子,则正确的输出是为:

  1. SELECT id, movie, description, rating
  2. FROM cinema
  3. WHERE description != 'boring'
  4. AND (id % 2 != 0)
  5. ORDER BY rating DESC;

5.无效的推文【leetcode1683】

表: Tweets

问题:写一条SQL语句,查询所有无效推文的编号(ID)。当推文内容中的字符数严格大于15 时,该推文是无效的,以任意顺序返回结果表

示例

  1. SELECT tweet_id
  2. FROM Tweets
  3. WHERE length(content) > 15;

6.订单最多的用户【leetcode586】

表:Orders

问题:编写一个SQL查询,为下了最多订单的客户查找customer_number

示例

  1. SELECT a.customer_number
  2. FROM Orders AS a
  3. INNER JOIN (SELECT customer_number, COUNT(order_number) AS num
  4. FROM Orders
  5. GROUP BY customer_number) AS b
  6. ON a.customer_number = b.customer_number
  7. ORDER BY b.num DESC
  8. LIMIT 1;

7.只出现一次的最大数字【leetcode619】

:MyNumbers

问题:单一数字是在 MyNumbers 表中只出现一次的数字

请你编写一个SQL查询来报告最大的单一数字 。如果不存在单一数字 ,查询需报告null

示例1

示例2

  1. SELECT IFNULL((SELECT num
  2. FROM MyNumbers
  3. GROUP BY num
  4. HAVING COUNT(num) = 1
  5. ORDER BY num DESC
  6. LIMIT 1),null) AS num;

8. 超过经理收入的员工【leetcode181】

表: Employee

问题:编写一个SQL查询来查找收入比经理高的员工,以任意顺序返回结果表

示例

  1. -- 解法1
  2. SELECT a.name AS Employee
  3. FROM Employee AS a,Employee AS b
  4. WHERE a.ManagerId = b.Id
  5. AND a.Salary > b.Salary;
  6. -- 解法2
  7. SELECT a.name AS Employee
  8. FROM Employee AS a
  9. INNER JOIN Employee AS b
  10. ON a.managerId = b.id
  11. WHERE a.salary > b.salary;

9.查找重复的电子邮箱【leetcode182】

表: Person

问题:根据以上输入,你的查询应返回以下结果:

 说明:所有电子邮箱都是小写字母

  1. -- 解法1
  2. SELECT Email
  3. FROM (SELECT Email, COUNT(*) AS nums
  4. FROM Person
  5. GROUP BY Email
  6. HAVING nums > 1) AS new_person;
  7. -- 解法2
  8. SELECT Email
  9. FROM Person
  10. GROUP BY Email
  11. HAVING COUNT(Id) > 1;

10.从不订购的客户【leetcode183】

表: Customers

表: Orders

问题:某网站包含两个表,Customers表和Orders表。编写一个 SQL 查询,找出所有从不订购任何东西的客户,查询应返回:

  1. SELECT Name AS Customers
  2. FROM Customers
  3. WHERE Id NOT IN(SELECT CustomerId FROM Orders);

11.寻找用户推荐人【leetcode584】

表: Customer

问题:给定表customer,里面保存了所有客户信息和他们的推荐人

写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都不是2

对于上面的示例数据,结果为:

  1. SELECT name
  2. FROM customer
  3. WHERE referee_id != 2 OR referee_id IS Null;

12.员工奖金【leetcode577】 

表:Employee

表:Bonus 

问题:选出所有bonus < 1000的员工的name及其bonus,输出示例:

  1. SELECT a.name, b.bonus
  2. FROM Employee AS a
  3. LEFT JOIN Bonus AS b
  4. ON a.empId = b.empId
  5. WHERE b.bonus < 1000 OR b.bonus IS null;

13.游戏玩法分析1【leetcode511】 

表:Activity 

问题:写一条 SQL查询语句获取每位玩家第一次登陆平台的日期,查询结果的格式如下所示:

  1. SELECT player_id, MIN(event_date) AS first_login
  2. FROM Activity
  3. GROUP BY player_id;

14.游戏玩法分析2【leetcode512】 

表:Activity

问题:请编写一个 SQL 查询,描述每一个玩家首次登陆的设备名称,查询结果格式在以下示例中:

  1. SELECT player_id AS 'player_id', device_id AS 'device_id'
  2. FROM Activity
  3. WHERE (player_id, event_date) IN (SELECT player_id, min(event_date)
  4. FROM Activity
  5. GROUP BY player_id);

15. 低质量问题【leetcode2026】

表:Problems

问题:写一个SQL查询低质量问题的ID集合。如果一个力扣问题的喜欢率(喜欢数除以总投票数)严格低于60% ,则该问题为低质量问题,按 problem_id 升序排列返回结果表,查询结果的格式如下所示:

  1. -- 解法1
  2. SELECT problem_id
  3. FROM Problems
  4. GROUP BY problem_id
  5. HAVING (SUM(likes) / (SUM(likes) + SUM(dislikes))) * 100 < 60
  6. ORDER BY problem_id ASC;
  7. -- 解法2
  8. SELECT problem_id
  9. FROM Problems
  10. WHERE (likes / (likes + dislikes)) < 0.6
  11. ORDER BY problem_id;

16.寻找今年具有正收入的客户【leetcode1821】 

表: Customers

问题:写一个SQL查询来查询2021年具有正收入的客户,可以按任意顺序返回结果表,查询结果格式如下例:

  1. SELECT customer_id
  2. FROM Customers
  3. WHERE year = 2021 AND revenue > 0;

17.可回收且低脂的产品【leetcode1757】 

表:Products 

问题:写出SQL语句,查找既是低脂又是可回收的产品编号,返回结果无顺序要求,查询结果格式如下例所示:

  1. SELECT product_id
  2. FROM Products
  3. WHERE low_fats = 'Y' AND recyclable = 'Y';

18.查找每个员工花费的总时间【leetcode1741】

表: Employees

问题:编写一个SQL查询以计算每位员工每天在办公室花费的总时间(以分钟为单位),请注意,在一天之内,同一员工是可以多次进入和离开办公室的。在办公室里一次进出所花费的时间为out_time 减去 in_time,返回结果表单的顺序无要求,查询结果的格式如下:

  1. SELECT event_day AS day, emp_id, SUM(out_time - in_time) AS total_time
  2. FROM Employees
  3. GROUP BY day, emp_id

19. 每天的领导和合伙人【leetcode1693】

表:DailySales

问题:写一条 SQL 语句,使得对于每一个date_id 和make_name,返回不同lead_id以及不同partner_id的数量,按任意顺序返回结果表,查询结果格式如下示例所示:

  1. SELECT date_id, make_name,
  2. COUNT(DISTINCT lead_id) AS unique_leads,
  3. COUNT(DISTINCT partner_id) AS unique_partners
  4. FROM DailySales
  5. GROUP BY date_id, make_name;

20.按日期分组销售产品【leetcode1484】

表:Activities 

问题:编写一个SQL查询来查找每个日期、销售的不同产品的数量及其名称,每个日期的销售产品名称应按词典序排列,返回按sell_date排序的结果表,查询结果格式如下例所示:

  1. SELECT sell_date, COUNT(DISTINCT product) AS num_sold,
  2. GROUP_CONCAT(DISTINCT product ORDER BY product ASC SEPARATOR ',') AS products
  3. FROM Activities
  4. GROUP BY sell_date
  5. ORDER BY sell_date ASC;

21.丢失信息的雇员【leetcode1965】 

表:Employees

表:Salaries 

问题:写出一个查询语句,找到所有丢失信息的雇员id。当满足下面其中一个条件时,就被认为是雇员的信息丢失: 

1.雇员的姓名丢失了

2.雇员的薪水信息丢失了

返回这些雇员的id(employee_id),从小到大排序,查询结果格式如下面的例子所示:

  1. SELECT a.employee_id
  2. FROM Employees AS a
  3. LEFT JOIN Salaries AS b
  4. ON a.employee_id = b.employee_id
  5. WHERE b.salary IS Null
  6. UNION
  7. SELECT b.employee_id
  8. FROM Employees AS a
  9. RIGHT JOIN Salaries AS b
  10. ON a.employee_id = b.employee_id
  11. WHERE a.name IS NULL
  12. ORDER BY employee_id ASC;

22.产品销售分析1【leetcode1068】 

表:Sales

表:Product 

问题:写一条SQL查询语句获取Sales表中所有产品对应的产品名称product_name 以及该产品的所有售卖年份year价格price,查询结果中的顺序无特定要求,查询结果格式示例如下:

  1. SELECT b.product_name, a.year, a.price
  2. FROM Sales AS a
  3. INNER JOIN Product AS b
  4. ON a.product_id = b.product_id
  5. ORDER BY a.year ASC;

23.产品销售分析2【leetcode1069】

表:Sales

表:Product 

问题:编写一个SQL查询,按产品id(product_id)来统计每个产品的销售总量,查询结果格式如下面例子所示:

  1. SELECT a.product_id, SUM(b.quantity) AS total_quantity
  2. FROM Product AS a
  3. INNER JOIN Sales AS b
  4. ON a.product_id = b.product_id
  5. GROUP BY b.product_id;

24.上升的温度【leetcode197】

表:Weather

问题:编写一个SQL查询,来查找与之前(昨天的)日期相比温度更高的所有日期的id,返回结果不要求顺序,查询结果格式如下例:

  1. -- DATEDIFF函数,可以计算两者的日期差
  2. -- DATEDIFF('2007-12-31','2007-12-30');
  3. -- DATEDIFF('2010-12-30','2010-12-31');
  4. SELECT b.Id
  5. FROM Weather as a,Weather as b
  6. WHERE a.Temperature < b.Temperature and DATEDIFF(a.recordDate,b.recordDate) = -1;

25.删除重复的电子邮箱【leetcode196】

表:Person

问题:编写一个SQL查询来删除所有重复的电子邮件,只保留一个id最小的唯一电子邮件,以任意顺序返回结果表,查询结果格式如下所示:

  1. -- 解法1
  2. DELETE P1
  3. FROM Person AS P1, Person AS P2
  4. WHERE P1.Email = P2.Email -- 利用where进行自连接
  5. AND P1.Id > P2.Id; -- 选择Id较大的行
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/871954
推荐阅读
相关标签
  

闽ICP备14008679号