第一题
不会:嘤嘤嘤
SELECT
Request_at AS Day,
FORMAT(AVG(IF(Status LIKE 'cancelled%', 1, 0)), 2) AS CancellationRate
FROM Trips
WHERE Client_Id NOT IN (
SELECT Users_Id FROM Users WHERE Banned = 'YES'
)
GROUP BY Request_at;
第2题(自己不太会)
见TASK5的另一个连接表
-- 创建表
DROP TABLE employee;
CREATE TABLE employee
(
Id INT NOT NULL ,
Name VARCHAR(50) NOT NULL,
Salary INT NOT NULL,
DepartmentId INT NOT NULL
);
INSERT INTO employee(Id,Name,Salary,DepartmentId) VALUES (1,'Joe',70000,1);
INSERT INTO employee(Id,Name,Salary,DepartmentId) VALUES (2,'Henry',80000,2);
INSERT INTO employee(Id,Name,Salary,DepartmentId) VALUES (3,'Sam',60000,2);
INSERT INTO employee(Id,Name,Salary,DepartmentId) VALUES (4,'Max',90000,1);
INSERT INTO employee(Id,Name,Salary,DepartmentId) VALUES (5,'Janet',69000,1);
INSERT INTO employee(Id,Name,Salary,DepartmentId) VALUES (6,'Randy',85000,1);
Drop TABLE Department;
CREATE TABLE Department (
Id INT NOT NULL PRIMARY KEY,
Name VARCHAR(50) NOT NULL
);
INSERT INTO Department(Id,Name) VALUES (1,'IT');
INSERT INTO Department(Id,Name) VALUES (2,'Sales');
-- 找出每个部门工资高的学生
SET @limit_n = 3; -- 定义变量,筛选各部门前N个工资最高的人
SELECT
d. NAME Department,
e. NAME Employee,
e.Salary
FROM
Employee e
INNER JOIN Department d ON e.DepartmentId = d.ID
WHERE
(
SELECT
COUNT(1)
FROM
Employee e2
WHERE
e2.DepartmentID = d.ID
AND e2.Salary > e.Salary
) < @limit_n
ORDER BY d.Name,e.Salary DESC;
-- 上题思路:对于每一个e.Salary,有多少个大于该Salary的,因为找前三个,所以小于3个就好(1,2)=3代表第四名了
-- 这里where e2.DepartmentID = d.ID表明对于每一个e.Salary,用e2.Salary去比较的时候,保证类别一样
第三题:
这个题做出来了,但是做的很困难
DROP TABLE scores;
CREATE TABLE scores (
Id INT NOT NULL ,
Score DECIMAL(10,2) NOT NULL
);
INSERT INTO scores(Id,Score) VALUES (1,3.50);
INSERT INTO scores(Id,Score) VALUES (2,3.65);
INSERT INTO scores(Id,Score) VALUES (3,4.00);
INSERT INTO scores(Id,Score) VALUES (4,3.85);
INSERT INTO scores(Id,Score) VALUES (5,4.00);
INSERT INTO scores(Id,Score) VALUES (6,3.65);
SELECT * FROM scores;
SELECT s1.score ,
(SELECT COUNT(s2.score)+1 FROM scores s2
WHERE s2.score > s1.score ) as '排名'
FROM scores s1
ORDER BY score DESC;
思路如下: