SQL练习题

15 篇文章 1 订阅

练习一: 各部门工资最高的员工(难度:中等)

在这里插入图片描述
在这里插入图片描述

CREATE TABLE Employee
( Id varchar(4) NOT NULL ,
  Name varchar(15) NOT NULL,
  Salary integer NOT NULL,
  DepartmentId varchar(4) NOT NULL, 
  primary key (Id)
  );
  insert into Employee 
  values
  ('1', 'Joe', 70000, '1'),
  ('2', 'Henry', 80000, '2'),
  ('3', 'Sam', 60000, '2'),
  ('4', 'Max', 90000, '1');
  CREATE TABLE Department (
Id VARCHAR(1) NOT NULL,
Name VARCHAR(225) NOT NULL,
PRIMARY KEY(Id)
);
 --部门信息
INSERT INTO Department VALUES
('1','IT'),
('2','Sales');
 
SELECT * 
FROM Department
--查找
SELECT D.name AS Department,
E.Name AS Employee,
E.Salary 
FROM Employee AS E
RIGHT JOIN Department AS D
ON d.Id=e.DepartmentId
LEFT JOIN (SELECT Max(Salary) Salary
,DepartmentId 
FROM Employee 
GROUP BY Employee.DepartmentId) A
ON A.DepartmentId = E.DepartmentId
WHERE E.Salary = A.Salary

练习二: 换座位(难度:中等)

在这里插入图片描述
在这里插入图片描述

SELECT 

	(CASE id % 2 
	 WHEN 0 THEN id - 1
	 WHEN 1 AND id != (SELECT MAX(id) FROM seat) THEN id + 1
	 ELSE id END) AS id, student
FROM seat
ORDER BY id;

练习三: 分数排名(难度:中等)

在这里插入图片描述

--窗口函数
SELECT Score, DENSE_RANK() OVER(ORDER BY Score DESC) AS RANK
FROM Scores;

练习四:连续出现的数字(难度:中等)

在这里插入图片描述

SELECT A.num as ConsecutiveNums
FROM Logs AS A
LEFT JOIN Logs B on A.id = B.id + 1
LEFT JOIN Logs C on A.id = C.id + 2  
where A.num =B.num and C.num = C.num; 

练习五:树节点 (难度:中等)

在这里插入图片描述
在这里插入图片描述

SELECT id,
CASE WHEN t.p_id IS NULL THEN 'Root' 
     WHEN t.id IN(SELECT p_id FROM tree ) THEN 'Inner'
     ELSE 'Leaf' 
     END AS Type
FROM  tree t 

练习六:至少有五名直接下属的经理 (难度:中等)

在这里插入图片描述

SELECT A.Name
FROM Employee A
LEFT JOIN Employee b
ON A.Id = B.ManagerId
GROUP BY A.Id
HAVING COUNT(*) >=  5

练习七:查询回答率最高的问题 (难度:中等)

在这里插入图片描述
在这里插入图片描述

SELECT question_id as survey_log
FROM
(
	SELECT question_id,
		SUM(case when action = "answer" THEN 1 ELSE 0 END) as num_answers,
		SUM(case when action = "show" THEN 1 ELSE 0 END) as num_shows
	FROM survey_log
	GROUP BY question_id
) as tbl
ORDER BY (num_answers / num_shows) DESC
LIMIT 1;

练习八:各部门前3高工资的员工(难度:中等)

在这里插入图片描述
在这里插入图片描述

练习九:平面上最近距离 (难度: 困难)

在这里插入图片描述

练习十:行程和用户(难度:困难)

Trips 表中存所有出租车的行程信息。每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键。Status 是枚举类型,枚举成员为 (‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。
在这里插入图片描述
Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。
在这里插入图片描述
写一段 SQL 语句查出2013年10月1日至2013年10月3日期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。
在这里插入图片描述

Section B 练习一:行转列

假设 A B C 三位小朋友期末考试成绩如下所示:
在这里插入图片描述
练习二:列转行
假设 A B C 三位小朋友期末考试成绩如下所示:
在这里插入图片描述

练习三:谁是明星带货主播?

假设,某平台2021年主播带货销售额日统计数据如下:

表名 anchor_sales
在这里插入图片描述
定义:如果某主播的某日销售额占比达到该平台当日销售总额的 90% 及以上,则称该主播为明星主播,当天也称为明星主播日。

请使用 SQL 完成如下计算:

a. 2021年有多少个明星主播日?

b. 2021年有多少个明星主播?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值