TASK6--实战2

第一题

不会:嘤嘤嘤

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;

思路如下:

 

猜你喜欢

转载自blog.csdn.net/kylin_learn/article/details/88118222