sql语句纵向转横向
来源:互联网 发布:当天 today sql 编辑:程序博客网 时间:2024/05/16 14:19
mysql中的case when语句查询结果问题
数据库中的测试数据
现在我想让他显示的结果是 :姓名 语文 数学 物理 这种形式的(就是行转列)
sql语句1:
这个结果是不对的
sql语句2:
这个结果是对的
问题;为什么加上MAX就能显示正确的结果 ,case xx when 条件 then 结果 为什么第一条语文是正确的结果 其他的两个都不能正确显示呢?资料说 case when相当于switch那么我这应该有三条判断语句啊?不知道各位看懂我的描述没有 求教?
答:按照sql查询执行的顺序,先按名字分组,然后第一个语文符合条件,成绩就能正确出来,但是遇到数学时,第一个case,不是语文当然就取0了。而第二种写法,同样遇到数学时是0,但是会继续执行第二个case,这时是83,取两个最大的,当然就不是0了,然后继续执行第三个case,是0,去两个最大的,当然还是83了。其他同理!
下面具体分析:
你的写法第一种 不加max的时候
执行SQL为:
1
SELECT
`姓名`,
CASE
`课程`
WHEN
'语文'
THEN
`分数`
ELSE
0
END
'语文'
,
2
CASE
`课程`
WHEN
'数学'
THEN
`分数`
ELSE
0
END
'数学'
,
3
CASE
`课程`
WHEN
'物理'
THEN
`分数`
ELSE
0
END
'物理'
FROM
TB
GROUP
BY
`姓名`;
那么在不分组之前SQL为:
1
SELECT
`姓名`,
CASE
`课程`
WHEN
'语文'
THEN
`分数`
ELSE
0
END
'语文'
,
2
CASE
`课程`
WHEN
'数学'
THEN
`分数`
ELSE
0
END
'数学'
,
3
CASE
`课程`
WHEN
'物理'
THEN
`分数`
ELSE
0
END
'物理'
FROM
TB;
那么不分组数据为:
然后group by `姓名`;
执行group by `姓名`时因为没有任何聚合函数, 那么会从基表里取group by后字段的第一条数据。即:
也就是你第一条SQL执行的结果:
OK。 我们再来说说第二个SQL。
第二个sql为:
1
SELECT
`姓名`,
MAX
(
CASE
`课程`
WHEN
'语文'
THEN
`分数`
ELSE
0
END
)
'语文'
,
2
MAX
(
CASE
`课程`
WHEN
'数学'
THEN
`分数`
ELSE
0
END
)
'数学'
,
3
MAX
(
CASE
`课程`
WHEN
'物理'
THEN
`分数`
ELSE
0
END
)
'物理'
FROM
TB
GROUP
BY
`姓名`;
先分解下SQL,执行MAX内CASE WHEN 及未GROUP BY `姓名`时SQL:
1
SELECT
`姓名`,
CASE
`课程`
WHEN
'语文'
THEN
`分数`
ELSE
0
END
'语文'
,
2
CASE
`课程`
WHEN
'数学'
THEN
`分数`
ELSE
0
END
'数学'
,
3
CASE
`课程`
WHEN
'物理'
THEN
`分数`
ELSE
0
END
'物理'
FROM
TB;
得到结果为:
这个结果其实和第一个SQL一样。
我们看看第二个SQL:
1
SELECT
`姓名`,
MAX
(
CASE
`课程`
WHEN
'语文'
THEN
`分数`
ELSE
0
END
)
'语文'
,
2
MAX
(
CASE
`课程`
WHEN
'数学'
THEN
`分数`
ELSE
0
END
)
'数学'
,
3
MAX
(
CASE
`课程`
WHEN
'物理'
THEN
`分数`
ELSE
0
END
)
'物理'
FROM
TB
GROUP
BY
`姓名`;
第二个SQL对分数进行了MAX函数操作同时又对`姓名`进行了分组。
那么这个基表max()中因为case when `课程` 取最大分数,再对`姓名`进行分组。
自然是取了每个姓名下每个学科的最高成绩。即:
- sql语句纵向转横向
- Sql 横向转纵向
- SQL Server数据库纵向转横向
- php数组纵向转横向
- php数组纵向转横向
- SQL,纵向数据变为横向显示。
- SQL 纵向表转为横向表
- SQL 将横向数据转为纵向记录
- SQL纵向变成横向,横向变成纵向(经典案例添加自己的想法)
- 转mysql横向扩展和纵向扩展
- sql查询结果的纵向变横向排列
- SQL 查询结果的纵向变横向排列
- SQL 查询结果的纵向变横向排列
- SQL 查询结果的纵向变横向排列
- sql server 纵向表横向输出的实现
- [MSSQL]SQL 查询结果的纵向变横向排列
- JQuery 横向纵向菜单
- 横向设计,纵向实施
- 使用机构证书为jar包签名
- Hive入门操作使用及常用配置
- FAST特征点检测
- 物料帐结算,库存差异为何在下月初冲回
- leetcode: 80. Remove Duplicates from Sorted Array II
- sql语句纵向转横向
- Python之Pandas库
- Git pull、push 免账号密码输入
- CDH5.4.7安装Hadoop集群Java检查不一致
- MongoDB 3.0+访问数据库的方法
- 工业界|谷歌前工程师注册AI教会:创造上帝机器人统治人类
- Some basic tips about 'git stash'
- 干货|采用Istio实现灰度发布(金丝雀发布)
- CRichEditCtrl使用大全