1. 问题描述
查询下面 数据库表数据name | course | score |
张三 | 语文 | 88 |
张三 | 数学 | 92 |
张三 | 物理 | 93 |
李四 | 语文 | 79 |
李四 | 数学 | 99 |
李四 | 物理 | 94 |
查询结果如下:
name | 语文 | 数学 | 物理 |
张三 | 88 | 92 | 93 |
李四 | 79 | 99 | 94 |
2. 解决方法
测试数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-- ----------------------------
-- Table structure for `score`
-- ----------------------------
DROP
TABLE
IF EXISTS `score`;
CREATE
TABLE
`score` (
`
name
`
varchar
(10)
DEFAULT
NULL
,
`course`
varchar
(10)
DEFAULT
NULL
,
`score`
int
(11)
DEFAULT
NULL
) ENGINE=InnoDB
DEFAULT
CHARSET=utf8;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT
INTO
`score`
VALUES
(
'张三'
,
'语文'
,
'88'
);
INSERT
INTO
`score`
VALUES
(
'张三'
,
'数学'
,
'92'
);
INSERT
INTO
`score`
VALUES
(
'张三'
,
'物理'
,
'93'
);
INSERT
INTO
`score`
VALUES
(
'李四'
,
'语文'
,
'79'
);
INSERT
INTO
`score`
VALUES
(
'李四'
,
'数学'
,
'99'
);
INSERT
INTO
`score`
VALUES
(
'李四'
,
'物理'
,
'94'
);
|
1. 使用IF()函数
1
2
3
4
5
|
SELECT
name
,
SUM
(IF(course =
'语文'
,score,0))
as
"语文"
,
SUM
(IF(course =
'数学'
,score,0))
as
"数学"
,
SUM
(IF(course =
'物理'
,score,0))
as
"物理"
FROM
score
GROUP
BY
name
;
|
2. 使用CASE WHEN
1
2
3
4
5
|
SELECT
name
,
SUM
(
CASE
WHEN
course =
'语文'
THEN
score
ELSE
0
END
)
as
"语文"
,
SUM
(
CASE
WHEN
course =
'数学'
THEN
score
ELSE
0
END
)
as
"数学"
,
SUM
(
CASE
WHEN
course =
'物理'
THEN
score
ELSE
0
END
)
as
"物理"
FROM
score
GROUP
BY
name
;
|