MySQL ---- SQL语句学习笔记二

本文通过SQL查询展示了如何使用CASE WHEN语句对成绩表进行统计,分别计算每个学生的JS、PY和SQL最高分,并计算平均分。同时对比了JOIN和LEFT JOIN的区别,以及如何优化平均分计算的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

case when

  1. 语句

case when 表达式 then 输出 when 表达式 then 输出 else 输出 end

  1. scores表创建
namestagescore
ajs1
bjs2
cjs3
apy2
bpy3
cpy1
asql2
bsql2
csql4

通过 SQL 将表的成绩进行统计!

SELECT
	name,
	max(
		CASE
		WHEN stage = 'js' THEN
			score
		ELSE
			NULL
		END
	) AS js,
	max(
		CASE
		WHEN stage = 'py' THEN
			score
		ELSE
			NULL
		END
	) AS py,
	max(
		CASE
		WHEN stage = 'sql' THEN
			score
		ELSE
			NULL
		END
	) AS 'sql',
	AVG(score)
	AS ag
FROM
	scores
GROUP BY
	name
  1. 生成表
namejspysqlag
a1221.6667
b2322.3333
c3142.6667

join

1. join 与 left join 的区别

1.1 left join 必须有 on;
1.2 left join 会检查左边表的数据是否都包含在新生成的表中;是,则与 join 没区别;否,则用 null 与不包含的行,组成新行,加入新表!

2. join 实现 case when 效果
SELECT
	s1.`name`,
	s1.score AS js,
	s2.score AS py,
	s3.score AS 'sql',
	(s1.score + s2.score + s3.score) / 3 AS ag
FROM
	scores s1
JOIN scores s2 ON s1.stage = 'js'
AND s2.stage = 'py'
AND s1.`name` = s2.`name`
JOIN scores s3 ON s3.stage = 'sql'
AND s1.`name` = s3.`name`

缺点:计算每个人的平均分数比较麻烦,如果增加科目,计算平均分需要修改!

3. 优化平均分计算
SELECT
	s1.`name`,
	s1.score AS 'js',
	s2.score AS 'py',
	s3.score AS 'sql',
	s4.ag AS ag
FROM
	scores s1
JOIN scores s2 ON s1.stage = 'js'
AND s2.stage = 'py'
AND s1.`name` = s2.`name`
JOIN scores s3 ON s3.stage = 'sql'
AND s1.`name` = s3.`name`
JOIN (
	SELECT
		`name`,
		AVG(score) AS ag
	FROM
		scores
	GROUP BY
		`name`
) s4 ON s4.`name` = s1.`name`
4. 结果
namejspysqlag
a1221.6667
b2322.3333
c3142.6667
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rattenking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值