LC/sql/looking/241020_1.sql
whaifree d9e64a81a6 feat(学习): 添加多线程、设计模式和LeetCode相关代码
- 新增 AbstractClass、Singleton 和 staticClass 类
- 添加 LeetCode3、LeetCode5、LeetCode20 等多个算法题解
- 新增 RedisDataTest 类,增加 Redis 地理位置相关测试
- 添加 SQL相关文件,包括学生表创建和查询、临时表使用等- 修改 ChainPattern、FunctionInterfaceDemo 和 FutureRelative 类
2024-10-21 23:06:26 +08:00

94 lines
2.7 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE TABLE students_241020 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT NOT NULL,
class VARCHAR(50) NOT NULL,
score1 DECIMAL(5, 2) NOT NULL, -- 数学成绩
score2 DECIMAL(5, 2) NOT NULL, -- 英语成绩
score3 DECIMAL(5, 2) NOT NULL -- 语文成绩
);
INSERT INTO students_241020 (name, age, class, score1, score2, score3) VALUES
('张三', 18, '高三1班', 90.50, 85.00, 92.00),
('李四', 17, '高三2班', 88.00, 90.50, 87.00),
('王五', 18, '高三1班', 92.00, 88.00, 89.00),
('赵六', 17, '高三2班', 85.00, 92.00, 90.50),
('孙七', 18, '高三1班', 87.00, 89.00, 91.00),
('周八', 17, '高三2班', 90.00, 87.00, 88.00),
('吴九', 18, '高三1班', 89.00, 91.00, 86.00),
('郑十', 17, '高三2班', 91.00, 86.00, 87.00);
# SQL语句
SELECT
tmp1.class, -- 选择班级字段
count( tmp1.id ) AS `count` -- 统计每个班级的学生数
FROM
(
-- 子查询,计算每个学生的总分
SELECT s1.id, s1.class, s1.score1 + s1.score2 + s1.score3 AS `sum`
FROM students_241020 s1
) tmp1
WHERE
-- 条件判断,筛选出总分高于平均分的记录
sum > (
SELECT AVG( s.score1 + s.score2 + s.score3 )
FROM students_241020 s
)
GROUP BY
tmp1.class -- 按班级分组
ORDER BY
count DESC -- 按学生数降序排列
LIMIT 3; -- 限制结果返回前三条记录
SELECT
tmp1.class, -- 选择班级字段
count( tmp1.id ) AS `count` -- 统计每个班级的学生数
FROM
students_241020 tmp1
WHERE
-- 条件判断,筛选出总分高于平均分的记录
tmp1.score1 + tmp1.score2 + tmp1.score3 > (
SELECT AVG( s.score1 + s.score2 + s.score3 )
FROM students_241020 s
)
GROUP BY
tmp1.class -- 按班级分组
ORDER BY
count DESC -- 按学生数降序排列
LIMIT 3; -- 限制结果返回前三条记录
-- 使用临时表
-- 计算平均分
WITH avg_score AS (
SELECT AVG(score1 + score2 + score3) AS avg_sum
FROM students_241020
),
-- 子查询,计算每个学生的总分
student_scores AS (
SELECT id, class, score1 + score2 + score3 AS `sum`
FROM students_241020
)
-- 查询总分高于平均分的班级及其学生数
SELECT
class, -- 选择班级字段
COUNT(id) AS `count` -- 统计每个班级的学生数
FROM
student_scores
WHERE
`sum` > (SELECT avg_sum FROM avg_score)
GROUP BY
class -- 按班级分组
ORDER BY
`count` DESC -- 按学生数降序排列
LIMIT 3; -- 限制结果返回前三条记录