CREATETABLE employee(id INTEGERNOTNULL,`name`VARCHAR(20)NOTNULL,
salary INTEGERNOTNULL,
departmentid INTEGERNOTNULL,PRIMARYKEY(id));INSERTINTO employee(id,name,salary,departmentid)VALUES(1,'Joe',70000,1);INSERTINTO employee(id,name,salary,departmentid)VALUES(2,'Henry',80000,2)(3,'Sam',60000,2)(4,'Max',90000,1);CREATETABLE department(id INTEGERNOTNULL,name VARCHAR(20)NOTNULL,PRIMARYKEY(id));INSERTINTO department(id,name)VALUES(1,'IT'),(2,Sales);SELECT
department
,employee
,salary
FROM(SELECT
d.name AS department,
e.name AS employee,
e.salary,
rank()OVER(PARTITIONBY department ORDERBY salary DESC)AS
ranks
FROM employee e
JOIN department d
ON e.departmentid = d.id)a
WHERE ranks=1;
练习二
CREATETABLE seat(id INTEGERNOTNULL,student VARCHAR(20),PRIMARYKEY(id));INSERTINTO seat(id,student)VALUES(1,'Abbot'),(2,'Doris'),(3,'Emerson'),(4,'Green'),(5,'Jeames');SELECT
ROW_NUMBER()OVER(ORDERBY`groups`)AS id
,student
FROM(SELECT
student
,groups
FROM(SELECT*,RANK()OVER(PARTITIONBY`groups`ORDERBY id DESC)AS ranks
FROM(SELECT*,ROUND(id/2)AS groups
FROM
seat
)a
)b
)c;
CREATETABLE numbers(id INTEGERNOTNULL,
num INTEGERNOTNULL,PRIMARYKEY(id));INSERTINTO numbers(id,num)VALUES(1,1),(2,1),(3,1),(4,2),(5,1),(6,2),(7,2);SELECT
n1.num AS ConsecutiveNums
FROM
numbers n1,
numbers n2,
numbers n3
WHERE
n1.id=n2.id-1AND n2.id = n3.id-1AND n1.num=n2.num
AND n2.num=n3.num;
练习五
CREATETABLE tree(id INTEGERNOTNULL,
p_id INTEGER,PRIMARYKEY(id));INSERTINTO tree(id,p_id)VALUES(1,null),(2,1),(3,1),(4,1),(5,2);SELECT
id
,CASEWHEN p_id ISNULLTHEN'Root'WHEN id IN(SELECTDISTINCT p_id FROM tree)THEN'Inner'ELSE'Leaf'ENDASTypeFROM
tree;
练习六
CREATETABLE Employee(id INTEGERNOTNULL,
name VARCHAR(20)NOTNULL,
department VARCHAR(5)NOTNULL,
managerid INTEGER,PRIMARYKEY(id));INSERTINTO Employee(id,name,department,managerid)VALUES(101,'John','A',NULL),(102,'Dan','A',101),(103,'James','A',101),(104,'Amy','A',101),(105,'Anne','A',101),(106,'Ron','B',101);SELECT
name
FROM`Employee`WHERE id =(SELECT
managerid
FROM(SELECT
managerid
,COUNT(DISTINCT id)AS counts
FROM`Employee`GROUPBY managerid)a
WHERE counts=5);
DROPTABLE employee;CREATETABLE employee(id INTEGERNOTNULL,`name`VARCHAR(20)NOTNULL,
salary INTEGERNOTNULL,
departmentid INTEGERNOTNULL,PRIMARYKEY(id));INSERTINTOTABLE employee(id,nam,salary,departmentid)VALUES(1,'Joe',70000,1),(2,'Henry',80000,2),(3,'Sam',60000,2),(4,'Max',90000,1),(6,'Janet',69000,1),(6,'Randy',85000,1);SELECT
department
,name AS employee
,salary
FROM(SELECT*,RANK()OVER(PARTITIONBY department ORDERBY salary DESC)AS ranks
FROM(SELECT
e.*,d.name AS department
FROM
employee e
JOIN
department d
on e.departmentid = d.id)a)b
WHERE ranks<=3;
练习十
CREATETABLE point_2d(x INTEGERNOTNULL,y INTEGERNOTNULL);INSERTINTO point_2d(x,y)VALUES(-1,-1),(0,0),(-1,-2);SELECTMIN(juli)as shortest
FROM(SELECT
p1.x
,p1.y
,p2.x AS x_2
,p2.y AS y_2
,abs (p1.x-p2.x)+abs(p1.y-p2.y)AS juli
FROM
point_2d p1
,point_2d p2
WHERE abs (p1.x-p2.x)+abs(p1.y-p2.y)!=0)a;
练习十一
CREATETABLE trips(
id INTEGERNOTNULL,client_id INTEGERNOTNULL,driver_id INTEGERNOTNULL,city_id INTEGERNOTNULL,statusVARCHAR(50)NOTNULL,request_at VARCHAR(50),PRIMARYKEY(id));INSERTINTO trips(id,client_id,driver_id,city_id,status,request_at)VALUES(1,1,10,1,'completed','2013-10-1'),(2,2,11,1,'cancelled_by_driver','2013-10-1'),(3,3,12,6,'completed','2013-10-1'),(4,4,13,6,'cancelled_by_client','2013-10-1'),(5,1,10,1,'completed','2013-10-2'),(6,2,11,6,'completed','2013-10-2'),(7,3,12,6,'completed','2013-10-2'),(8,2,12,12,'completed','2013-10-3'),(9,3,10,12,'completed','2013-10-3'),(10,4,13,12,'cancelled_by_driver','2013-10-3');CREATETABLE users(
users_id INTEGERNOTNULL,banned VARCHAR(5)NOTNULL,role VARCHAR(10)NOTNULL,PRIMARYKEY(users_id));INSERTINTO users(users_id,banned,role)VALUES(1,'No','client'),(2,'Yes','client'),(3,'No','client'),(4,'No','client'),(10,'No','driver'),(11,'No','driver'),(12,'No','driver'),(13,'No','driver');SELECT
request_at
,SUM(cancel_trips)/SUM(total_trips)AS CancellationRate
FROM(SELECT
id
,request_at
,1as total_trips
,CASEWHENstatusIN('cancelled_by_client','cancelled_by_driver')THEN1ELSE0ENDAS cancel_trips
FROM(SELECT
s.*,u1.banned AS driver_baned
FROM(SELECT
t.*,u.banned AS client_baned
FROM
trips t
LEFTJOIN
users u
ON t.client_id =u.users_id)s
LEFTJOIN
users u1
ON s.driver_id =u1.users_id
WHERE client_baned !='Yes')t)m
GROUPBY request_at;/*
+----+-----------+-----------+---------+---------------------+------------+--------------+--------------+
| id | client_id | driver_id | city_id | status | request_at | client_baned | driver_baned |
+----+-----------+-----------+---------+---------------------+------------+--------------+--------------+
| 1 | 1 | 10 | 1 | completed | 2013-10-1 | No | No |
| 2 | 2 | 11 | 1 | cancelled_by_driver | 2013-10-1 | Yes | No |
| 3 | 3 | 12 | 6 | completed | 2013-10-1 | No | No |
| 4 | 4 | 13 | 6 | cancelled_by_client | 2013-10-1 | No | No |
| 5 | 1 | 10 | 1 | completed | 2013-10-2 | No | No |
| 6 | 2 | 11 | 6 | completed | 2013-10-2 | Yes | No |
| 7 | 3 | 12 | 6 | completed | 2013-10-2 | No | No |
| 8 | 2 | 12 | 12 | completed | 2013-10-3 | Yes | No |
| 9 | 3 | 10 | 12 | completed | 2013-10-3 | No | No |
| 10 | 4 | 13 | 12 | cancelled_by_driver | 2013-10-3 | No | No |
+----+-----------+-----------+---------+---------------------+------------+--------------+--------------+
*/
题目题目链接练习一CREATE TABLE employee(id INTEGER NOT NULL, `name` VARCHAR(20) NOT NULL, salary INTEGER NOT NULL, departmentid INTEGER NOT NULL, PRIMARY KEY (id));INSERT IN