首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MySQL ---- SQL语句学习笔记二

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

作者头像
Rattenking
发布于 2021-09-07 16:34:27
发布于 2021-09-07 16:34:27
5670
举报
文章被收录于专栏:RattenkingRattenking

case when

  1. 语句

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

  1. scores表创建

name

stage

score

a

js

1

b

js

2

c

js

3

a

py

2

b

py

3

c

py

1

a

sql

2

b

sql

2

c

sql

4

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

代码语言:javascript
复制
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. 生成表

name

js

py

sql

ag

a

1

2

2

1.6667

b

2

3

2

2.3333

c

3

1

4

2.6667

join

1. join 与 left join 的区别

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

2. join 实现 case when 效果
代码语言:javascript
复制
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. 优化平均分计算
代码语言:javascript
复制
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. 结果

name

js

py

sql

ag

a

1

2

2

1.6667

b

2

3

2

2.3333

c

3

1

4

2.6667

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • case when
  • join
    • 1. join 与 left join 的区别
    • 2. join 实现 case when 效果
    • 3. 优化平均分计算
    • 4. 结果
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档