MySQL进阶挑战

1.设计表并完成下列需求

        部门表 dept

        员工表 emp

# 创建部门表dept
CREATE TABLE dept(
deptno int primary key auto_increment COMMENT '部门编号',
dname VARCHAR(20) COMMENT '部门名称',
loc VARCHAR(13) COMMENT '部门地点'
);
# 插入数据
INSERT INTO dept VALUES(null,'accounting','一区');
INSERT INTO dept VALUES(null,'research','二区');
INSERT INTO dept VALUES(null,'operations','二区');

# 创建员工表emp
CREATE TABLE emp(
empno int primary key auto_increment COMMENT '员工编号',
ename VARCHAR(10) COMMENT '员工姓名',
job VARCHAR(10) COMMENT '职位',
mgr int COMMENT '上级编号',
hiredate DATE COMMENT '入职时间',
sal double COMMENT '月薪',
comm NUMERIC(7,2) COMMENT '奖金',
deptno int COMMENT '所属部门'
);
INSERT INTO emp VALUES(100,'Alice','副总',NULL,'2002-05-1',90000,NULL,2);
INSERT INTO emp VALUES(200,'Ben','总监',100,'2015-02-02',40000,3000,1);
INSERT INTO emp VALUES(300,'Ben','CEO',100,'2016-02-02',30000,2000,1);
INSERT INTO emp VALUES(400,'Jone','经理',300,'2017-02-02',25000,1000,3);
INSERT INTO emp VALUES(500,'Bella','经理',300,'2019-02-02',20000,1000,3);
INSERT INTO emp VALUES(600,'Evan','员工',400,'2019-02-22',4500,200.12,3);
INSERT INTO emp VALUES(700,'Hedy','员工',500,'2020-03-19',6500,200.58,3);
INSERT INTO emp VALUES(800,'Susan','员工',500,'2023-04-20',12000,300.64,3);

条件查询    

    1). 查询没有奖金的员工信息;

SELECT * FROM emp WHERE comm IS NULL

        2). 查询有奖金的员工信息;

SELECT * FROM emp WHERE comm IS NOT NULL

        3). 查询员工表中工资5000~20000的信息;

SELECT * FROM emp WHERE 
#sal>=5000 and sal<20000
sal BETWEEN 5000 AND 20000 

        4). 查询2023年入职的员工姓名;

SELECT ename FROM emp WHERE 
#hiredate between '2023-1-1' and '2023-12-31'
YEAR(hiredate)=2023

        5). 展示前两条员工数据;

SELECT * FROM emp LIMIT 2 
SELECT * FROM emp LIMIT 0,2 #从0+1的数据开始,总共展示2条

        6). 查询岗位是员工的第一条记录;

SELECT * FROM emp WHERE job='员工' LIMIT 0,1#limit通常放最后 

        7). 按照工资排序(降序);

SELECT * FROM emp ORDER BY sal DESC #按数值降序

        8). 按照名字排序(按字母降序);

SELECT * FROM emp ORDER BY ename DESC #按字母降序

        9). 查询17年到23年入职的员工信息只取前两条并按照工资升序排序;

SELECT * FROM emp WHERE 
YEAR(hiredate) BETWEEN 2017 AND 2023 #区间[2017,2023]
ORDER BY sal #排序,默认的升序
LIMIT 2 #分页,只取前两条,通常放最后

统计    

        10). 统计员工表中都有人的年薪;

SELECT sal,comm,sal*16+IFNULL(comm,0)*16 FROM emp

        11). 统计2019年以前入职的员工信息;

SELECT * FROM emp WHERE 
YEAR(hiredate)<2019

聚合函数      

          12). 统计名字里包含a的总记录数;

SELECT COUNT(1) FROM emp WHERE ename LIKE '%a%'

        13).统计员工表中的最高薪;

SELECT MAX(sal) FROM emp 

        14). 统计1号部门的平均薪资;

SELECT AVG(sal) FROM emp WHERE deptno=1

        15). 统计1号部门一年的工资支出总数;

SELECT SUM(sal)*12 FROM emp WHERE deptno=2

        16). 统计每个部门的平均薪资;

SELECT AVG(sal),deptno FROM emp 
GROUP BY deptno #按照部门分组

        17). 统计每个部门的最高薪资;

SELECT MAX(sal),deptno FROM emp 
#查询结果中出现了混合列,包括着聚合列和非聚合列,必须分组
GROUP BY deptno

        18). 统计每年入职的总人数;

SELECT YEAR(hiredate),COUNT(1) FROM emp 
GROUP BY YEAR(hiredate)

        19). 统计每个岗位的平均薪资(保留两位小数);

SELECT FORMAT(AVG(sal),2),job FROM emp
GROUP BY job

        20). 统计每个岗位的平均薪资,而且只要>=10000的;

SELECT AVG(sal) a,job FROM emp
#where AVG(sal)>=10000 
#注意:::where里不能用别名,也不能出现聚合函数
GROUP BY job  #按照非聚合列分组
HAVING a>=10000 #分组后的过滤,a是别名

        21). 统计每年入职的人数,而且只要19年的。

SELECT YEAR(hiredate) ,COUNT(1) FROM emp
WHERE YEAR(hiredate)=2019 
GROUP BY YEAR(hiredate) #分组
#having a=2019 #分组后的过滤
# where比having 高效,因为执行时机要早一些

2.返回Customers表中的顾客名称(cust_name)和Orders表中的相关订单号(order_num),添加第三列OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序

Orders表:订单号(order_num)、顾客id(cust_id)

Customers表:顾客名称(cust_name)、顾客id(cust_id)

OrderItems表:商品订单号(order_num)、商品数量(quantity)、商品价格(item_price)

# 订单信息表Orders
DROP TABLE IF EXISTS `Orders`;
CREATE TABLE IF NOT EXISTS `Orders`(
  order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',
  cust_id VARCHAR(255) NOT NULL COMMENT '顾客id'
);
INSERT `Orders` VALUES ('a1','cust10'),('a2','cust1'),('a3','cust2'),('a4','cust22'),('a5','cust221'),('a7','cust2217');

# 顾客信息表 Customerss
DROP TABLE IF EXISTS `Customerss`;
CREATE TABLE IF NOT EXISTS `Customerss`(
    cust_id VARCHAR(255) NOT NULL COMMENT '客户id',
    cust_name VARCHAR(255) NOT NULL COMMENT '客户姓名'
);
INSERT `Customerss` VALUES ('cust10','andy'),('cust1','ben'),('cust2','tony'),('cust22','tom'),('cust221','an'),('cust2217','hex');

# 商品信息表 OrderItems
DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
  order_num VARCHAR(255) NOT NULL COMMENT '商品订单号',
  quantity INT(16) NOT NULL COMMENT '商品数量',
  item_price INT(16) NOT NULL COMMENT '商品价格'
);
INSERT `OrderItems` VALUES ('a1',1000,10),('a2',200,10),('a3',10,15),('a4',25,50),('a5',15,25),('a7',7,7);


# 需求:返回 Customers 表中的顾客名称(cust_name)和 Orders 表中的相关订单号(order_num),添加第三列 OrderTotal,其中包含每个订单的总价,并按顾客名称再按订单号对结果进行升序排序
select c.cust_name,t.order_num,t.OrderTotal from Orders o
 join (select order_num, sum(quantity * item_price) OrderTotal
    from  OrderItems
    group by order_num
  ) t on t.order_num = o.order_num join Customerss c on c.cust_id = o.cust_id
order by c.cust_name,t.order_num;

3.请从试卷作答记录表中找到SQL试卷得分不小于该类试卷平均得分的用户最低得分

 exam_record表:用户ID(uid)、试卷ID(exam_id)、开始作答时间(start_time)、交卷时间(submit_time)、得分(score)

   

examination_info表:试卷ID(exam_id)、试卷类别(tag)、试卷难度(difficulty)、考试时长(duration)、发布时间(release_time)

drop table if exists examination_info;
CREATE TABLE  examination_info (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
    tag varchar(32) COMMENT '类别标签',
    difficulty varchar(8) COMMENT '难度',
    duration int NOT NULL COMMENT '时长',
    release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

drop table if exists exam_record;
CREATE TABLE  exam_record (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    exam_id int NOT NULL COMMENT '试卷ID',
    start_time datetime NOT NULL COMMENT '开始时间',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO examination_info(exam_id,tag,difficulty,duration,release_time) VALUES
  (9001, 'SQL', 'hard', 60, '2023-01-01 10:00:00'),
  (9002, 'SQL', 'easy', 60, '2023-02-01 10:00:00'),
  (9003, '算法', 'medium', 80, '2023-08-02 10:00:00');

INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2023-01-02 09:01:01', '2023-01-02 09:21:01', 80),
(1002, 9001, '2023-09-05 19:01:01', '2023-09-05 19:40:01', 89),
(1002, 9002, '2023-09-02 12:01:01', null, null),
(1002, 9003, '2023-09-01 12:01:01', null, null),
(1002, 9001, '2023-02-02 19:01:01', '2023-02-02 19:30:01', 87),
(1002, 9002, '2023-05-05 18:01:01', '2023-05-05 18:59:02', 90),
(1003, 9002, '2023-02-06 12:01:01', null, null),
(1003, 9003, '2023-09-07 10:01:01', '2023-09-07 10:31:01', 86),
(1004, 9003, '2023-09-06 12:01:01', null, null);



# 需求:请从试卷作答记录表中找到SQL试卷得分不小于该类试卷平均得分的用户最低得分。
SELECT MIN(score) min_score_over_avg
FROM exam_record
WHERE exam_id IN (SELECT exam_id FROM examination_info WHERE tag = 'SQL')
AND score >=(
    SELECT AVG(score) avg_score
    FROM exam_record
    WHERE exam_id IN (
            SELECT exam_id FROM examination_info WHERE tag = 'SQL'
    )
);

select min(e_r.score) as min_score_over_avg
from exam_record e_r join examination_info e_i
on e_r.exam_id = e_i.exam_id
where e_i.tag = 'SQL'
and score >= (select avg(e1.score)
             from exam_record e1 join examination_info e2
             on e1.exam_id = e2.exam_id
             where tag = 'SQL'
             )

4.请从表中统计出 “当月均完成试卷数”不小于3的用户们爱作答的类别及作答次数,按次数降序输出

试卷作答记录表exam_record:用户ID(uid),试卷ID(exam_id),开始作答时间(start_time),交卷时间(submit_time)、没提交的话为NULL,得分(score)

试卷信息表examination_info:试卷ID(exam_id),试卷类别(tag),试卷难度(difficulty),考试时长(duration),发布时间(release_time)

drop table if exists examination_info2,exam_record2;
CREATE TABLE examination_info2 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
    tag varchar(32) COMMENT '类别标签',
    difficulty varchar(8) COMMENT '难度',
    duration int NOT NULL COMMENT '时长',
    release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE exam_record2 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    exam_id int NOT NULL COMMENT '试卷ID',
    start_time datetime NOT NULL COMMENT '开始时间',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO examination_info2(exam_id,tag,difficulty,duration,release_time) VALUES
  (9001, 'SQL', 'hard', 60, '2023-01-01 10:00:00'),
  (9002, 'C++', 'easy', 60, '2023-02-01 10:00:00'),
  (9003, '算法', 'medium', 80, '2023-08-02 10:00:00');

INSERT INTO exam_record2(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2023-07-02 09:01:01', null, null),
(1002, 9003, '2023-09-01 12:01:01', '2023-09-01 12:21:01', 60),
(1002, 9002, '2023-09-02 12:01:01', '2023-09-02 12:31:01', 70),
(1002, 9001, '2023-09-05 19:01:01', '2023-09-05 19:40:01', 81),
(1002, 9002, '2023-07-06 12:01:01', null, null),
(1003, 9003, '2023-09-07 10:01:01', '2023-09-07 10:31:01', 86),
(1003, 9003, '2023-09-04 12:01:01', '2023-09-04 12:11:01', 40),
(1003, 9001, '2023-09-04 13:01:01', null, null),
(1003, 9002, '2023-09-04 14:01:01', null, null),
(1003, 9003, '2023-09-04 15:01:01', null, null),
(1005, 9001, '2023-09-01 12:01:01', '2023-09-01 12:31:01', 88),
(1005, 9002, '2023-09-01 12:01:01', '2023-09-01 12:31:01', 88),
(1005, 9002, '2023-09-02 12:11:01', '2023-09-02 12:31:01', 89);


# 需求:请从表中统计出 “当月均完成试卷数”不小于3的用户们爱作答的类别及作答次数,按次数降序输出
SELECT tag, COUNT(t1.exam_id) tag_cnt
FROM examination_info2 t1
JOIN exam_record2 t2 ON t1.exam_id = t2.exam_id
WHERE uid IN (
    SELECT uid
    FROM exam_record2
    WHERE submit_time IS NOT NULL 
        AND DATE_FORMAT(submit_time,'%Y%m')='202309'
    GROUP BY uid
    HAVING COUNT(uid) >= 3
)
GROUP BY t1.exam_id
ORDER BY tag_cnt DESC;

5.请计算每张SQL类别试卷发布后,当天5级以上的用户作答的人数uv和平均分avg_score,按人数降序,相同人数的按平均分升序

用户信息表user_info:用户ID(uid),昵称(nick_name),成就值(achievement),等级(level),职业方向(job),注册时间(register_time)

试卷信息表examination_info:试卷ID(exam_id),试卷类别(tag),试卷难度(difficulty),考试时长(duration),发布时间(release_time)

试卷作答记录表exam_record:用户ID(uid),试卷ID(exam_id),开始作答时间(start_time),交卷时(submit_time),得分(score)

drop table if exists examination_info3,user_info3,exam_record3;
CREATE TABLE examination_info3 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
    tag varchar(32) COMMENT '类别标签',
    difficulty varchar(8) COMMENT '难度',
    duration int NOT NULL COMMENT '时长',
    release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE user_info3 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int UNIQUE NOT NULL COMMENT '用户ID',
    `nick_name` varchar(64) COMMENT '昵称',
    achievement int COMMENT '成就值',
    level int COMMENT '用户等级',
    job varchar(32) COMMENT '职业方向',
    register_time datetime COMMENT '注册时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE exam_record3 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    exam_id int NOT NULL COMMENT '试卷ID',
    start_time datetime NOT NULL COMMENT '开始时间',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO user_info3(uid,`nick_name`,achievement,level,job,register_time) VALUES
  (1001, '小a', 3100, 7, '算法', '2023-01-01 10:00:00'),
  (1002, '小b', 2100, 6, '算法', '2023-01-01 10:00:00'),
  (1003, '小c', 1500, 5, '算法', '2023-01-01 10:00:00'),
  (1004, '小d', 1100, 4, '算法', '2023-01-01 10:00:00'),
  (1005, '小e', 1600, 6, 'C++', '2023-01-01 10:00:00'),
  (1006, '小小', 3000, 6, 'C++', '2023-01-01 10:00:00');

INSERT INTO examination_info3(exam_id,tag,difficulty,duration,release_time) VALUES
  (9001, 'SQL', 'hard', 60, '2023-09-01 06:00:00'),
  (9002, 'C++', 'easy', 60, '2023-02-01 10:00:00'),
  (9003, '算法', 'medium', 80, '2023-08-02 10:00:00');

INSERT INTO exam_record3(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2023-09-01 09:01:01', '2023-09-01 09:41:01', 70),
(1002, 9003, '2023-09-01 12:01:01', '2023-09-01 12:21:01', 60),
(1002, 9002, '2023-09-02 12:01:01', '2023-09-02 12:31:01', 70),
(1002, 9001, '2023-09-01 19:01:01', '2023-09-01 19:40:01', 80),
(1002, 9003, '2023-08-01 12:01:01', '2023-08-01 12:21:01', 60),
(1002, 9002, '2023-08-02 12:01:01', '2023-08-02 12:31:01', 70),
(1002, 9001, '2023-09-01 19:01:01', '2023-09-01 19:40:01', 85),
(1002, 9002, '2023-07-06 12:01:01', null, null),
(1003, 9003, '2023-09-07 10:01:01', '2023-09-07 10:31:01', 86),
(1003, 9003, '2023-09-08 12:01:01', '2023-09-08 12:11:01', 40),
(1003, 9001, '2023-09-01 13:01:01', '2023-09-01 13:41:01', 70),
(1003, 9002, '2023-09-08 14:01:01', null, null),
(1003, 9003, '2023-09-08 15:01:01', null, null),
(1005, 9001, '2023-09-01 12:01:01', '2023-09-01 12:31:01', 90),
(1005, 9002, '2023-09-01 12:01:01', '2023-09-01 12:31:01', 88),
(1005, 9002, '2023-09-02 12:11:01', '2023-09-02 12:31:01', 89);


#需求:请计算每张SQL类别试卷发布后,当天5级以上的用户作答的人数uv和平均分avg_score,
#  按人数降序,相同人数的按平均分升序
SELECT 
    t1.exam_id, 
    COUNT(DISTINCT t1.uid) uv, 
    ROUND(AVG(t1.score),1) avg_score 
FROM exam_record3 t1 
JOIN (SELECT exam_id, DATE(release_time) rt
    FROM examination_info3
    WHERE tag = 'SQL') t2
ON t1.exam_id = t2.exam_id
JOIN (SELECT uid
    FROM user_info3
    WHERE `level` > 5) t3 
ON t1.uid = t3.uid
WHERE 
    t1.submit_time IS NOT NULL 
    AND DATE(t1.submit_time) = rt
GROUP BY t1.exam_id
ORDER BY uv DESC, avg_score ASC;

6.请找到高难度SQL试卷得分平均值大于80并且是7级的红名大佬,统计他们的2021年试卷总完成次数和题目总练习次数,只保留2021年有试卷完成记录的用户。结果按试卷完成数升序,按题目练习数降序

用户信息表user_info:用户ID(uid),昵称(nick_name),成就值(achievement),等级(level),职业方向(job),注册时间(register_time)

试卷信息表examination_info:试卷ID(exam_id),试卷类别(tag),试卷难度(difficulty),考试时长(duration),发布时间(release_time)

试卷作答记录表exam_record:用户ID(uid),试卷ID(exam_id),开始作答时(start_time),交卷时间(submit_time),得分(score)

题目练习记录表practice_record:用户ID(uid),题目ID(question_id),提交时间(submit_time),得分(score)

drop table if exists examination_info4,user_info4,exam_record4,practice_record4;
CREATE TABLE examination_info4 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    exam_id int UNIQUE NOT NULL COMMENT '试卷ID',
    tag varchar(32) COMMENT '类别标签',
    difficulty varchar(8) COMMENT '难度',
    duration int NOT NULL COMMENT '时长',
    release_time datetime COMMENT '发布时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE user_info4 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int UNIQUE NOT NULL COMMENT '用户ID',
    `nick_name` varchar(64) COMMENT '昵称',
    achievement int COMMENT '成就值',
    level int COMMENT '用户等级',
    job varchar(32) COMMENT '职业方向',
    register_time datetime COMMENT '注册时间'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE practice_record4 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    question_id int NOT NULL COMMENT '题目ID',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE exam_record4 (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    exam_id int NOT NULL COMMENT '试卷ID',
    start_time datetime NOT NULL COMMENT '开始时间',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO user_info4(uid,`nick_name`,achievement,level,job,register_time) VALUES
  (1001, '牛客1号', 3100, 7, '算法', '2020-01-01 10:00:00'),
  (1002, '牛客2号', 2300, 7, '算法', '2020-01-01 10:00:00'),
  (1003, '牛客3号', 2500, 7, '算法', '2020-01-01 10:00:00'),
  (1004, '牛客4号', 1200, 5, '算法', '2020-01-01 10:00:00'),
  (1005, '牛客5号', 1600, 6, 'C++', '2020-01-01 10:00:00'),
  (1006, '牛客6号', 2000, 6, 'C++', '2020-01-01 10:00:00');

INSERT INTO examination_info4(exam_id,tag,difficulty,duration,release_time) VALUES
  (9001, 'SQL', 'hard', 60, '2021-09-01 06:00:00'),
  (9002, 'C++', 'hard', 60, '2021-09-01 06:00:00'),
  (9003, '算法', 'medium', 80, '2021-09-01 10:00:00');

INSERT INTO practice_record4(uid,question_id,submit_time,score) VALUES
(1001, 8001, '2021-08-02 11:41:01', 60),
(1002, 8001, '2021-09-02 19:30:01', 50),
(1002, 8001, '2021-09-02 19:20:01', 70),
(1002, 8002, '2021-09-02 19:38:01', 70),
(1004, 8001, '2021-08-02 19:38:01', 70),
(1004, 8002, '2021-08-02 19:48:01', 90),
(1001, 8002, '2021-08-02 19:38:01', 70),
(1004, 8002, '2021-08-02 19:48:01', 90),
(1004, 8002, '2021-08-02 19:58:01', 94),
(1004, 8003, '2021-08-02 19:38:01', 70),
(1004, 8003, '2021-08-02 19:48:01', 90),
(1004, 8003, '2021-08-01 19:38:01', 80);

INSERT INTO exam_record4(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2021-09-01 09:01:01', '2021-09-01 09:31:00', 81),
(1002, 9002, '2021-09-01 12:01:01', '2021-09-01 12:31:01', 81),
(1003, 9001, '2021-09-01 19:01:01', '2021-09-01 19:40:01', 86),
(1003, 9002, '2021-09-01 12:01:01', '2021-09-01 12:31:51', 89),
(1004, 9001, '2021-09-01 19:01:01', '2021-09-01 19:30:01', 85),
(1005, 9002, '2021-09-01 12:01:01', '2021-09-01 12:31:02', 85),
(1006, 9003, '2021-09-07 10:01:01', '2021-09-07 10:21:01', 84),
(1006, 9001, '2021-09-07 10:01:01', '2021-09-07 10:21:01', 80);


#请找到高难度SQL试卷得分平均值大于80并且是7级的红名大佬, 统计他们的2021年试卷总完成次数和题目总练习次数,只保留2021年有试卷完成记录的用户。 结果按试卷完成数升序,按题目练习数降序
SELECT t1.uid, exam_cnt, IFNULL(question_cnt,0) question_cnt
FROM(
    SELECT t1.uid
    FROM exam_record4 t1
    JOIN user_info4 t2 ON t1.uid = t2.uid
    JOIN examination_info4 t3 ON t1.exam_id = t3.exam_id
    WHERE t3.tag = 'SQL' AND t3.difficulty = 'hard' AND t2.level = 7
    GROUP BY t1.uid
    HAVING AVG(t1.score) > 80
) t1
LEFT JOIN (
    SELECT uid, COUNT(exam_id) exam_cnt
    FROM exam_record4
    WHERE YEAR(submit_time) = 2021
    GROUP BY uid
) t2 ON t1.uid = t2.uid
LEFT JOIN (
    SELECT uid,COUNT(question_id) question_cnt
    FROM practice_record4
    WHERE YEAR(submit_time) = 2021
    GROUP BY uid
) t3 ON t1.uid = t3.uid
ORDER BY exam_cnt ASC,question_cnt DESC;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 进阶实战》是一本探讨MySQL数据库高级应用和实战技巧的书籍。MySQL是一种广泛使用的开源关系型数据库管理系统,在Web开发和数据分析等领域有着重要的应用。 《MySQL 进阶实战》将帮助读者理解MySQL的高级功能和最佳实践,进一步优化数据库的性能和稳定性。本书主要内容包括: 1. 高级查询优化:介绍如何使用索引、列存储和分区技术来提高查询性能,避免慢查询和死锁等问题。 2. 数据库设计与架构:详细讲解如何设计合理的数据库模型,包括关系、数据类型和字段命名规范,以及应对高并发和大数据量的应用场景。 3. 高可用与备份恢复:介绍如何设置主从复制、集群和故障切换,确保数据库的高可用性和数据安全。 4. 性能调优与监控:介绍如何使用工具和技术调优MySQL数据库的性能,包括查询优化、缓存设置和资源管理等方面。 5. 安全与权限管理:详细讲解如何设置数据库的用户权限、访问控制和加密保护,防止非法访问和数据泄露。 6. MySQL新特性与实践:介绍新版本MySQL的特性和改进,以及如何应用到实际项目中。 《MySQL 进阶实战》不仅适合已经具有一定MySQL基础知识的读者,也可以作为MySQL数据库开发和运维人员的参考手册。通过读此书,读者将能够更深入地了解和应用MySQL数据库,在实际项目中提高开发和管理效率,提升数据库的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值