[面试]应聘某公司BI/DW/SQL开发的一道测试题(行转列)

本文探讨了如何使用SQL查询来获取并整合不同课程的成绩数据,通过聚合操作找到每个学生每门课程的最大分数,并计算总分,展示了SQL在数据处理与分析中的强大能力。

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

题目:


Provide:

NAME

COURSE

SCORE

Alex

English

81

Lucy

Math

79

Lucy

English

82

Alex

English

83

Alex

Math

77

Lucy

Math

75

Expect:

NAME

ENGLISH

MATH

SUM_SCORE

Alex

83

77

160

Lucy

82

79

161

我的理解:取每个人每科最大分,再计算总分。

实现SQL(原来word直接贴过来的复制再粘贴后空格丢失,改成嵌到代码框中的形式了):

SELECT   NAME
        ,SUM(english) english
        ,SUM(math) math
        ,SUM(english+ math)sum_score
    FROM(SELECT   NAME
                 ,MAX(score) english
                 ,0 math
             FROM class_score
            WHERE course ='English'
          GROUP BY NAME
          UNION
          SELECT   NAME
                 ,0 english
                 ,MAX(score) math
             FROM class_score
            WHERE course ='Math'
          GROUP BY NAME)
GROUP BY NAME
ORDER BY NAME


测试:

CREATE TABLE class_score(
NAME VARCHAR2(20),
course VARCHAR2(20),
score NUMBER);


INSERT INTO class_score
(NAME
,course
,score
)
VALUES ('Alex', 'English', 81);

INSERT INTO class_score
(NAME
,course
,score
)
VALUES ('Lucy', 'Math', 79);

INSERT INTO class_score
(NAME
,course
,score
)
VALUES ('Lucy', 'English', 82);

INSERT INTO class_score
(NAME
,course
,score
)
VALUES ('Alex', 'English', 83);

INSERT INTO class_score
(NAME
,course
,score
)
VALUES ('Alex', 'Math', 77);

INSERT INTO class_score
(NAME
,course
,score
)
VALUES ('Lucy', 'Math', 75);


SQL> col name for a10
SQL> col course for a10
SQL> col score for 99
SQL> SELECT *
2 FROM class_score;

NAME COURSE SCORE
---------- ---------- -----
Alex English 81
Lucy Math 79
Lucy English 82
Alex English 83
Alex Math 77
Lucy Math 75

6 rows selected.

SQL> SELECT NAME
2 ,SUM (english) english
3 ,SUM (math) math
4 ,SUM (english + math) sum_score
5 FROM (SELECT NAME
6 ,MAX (score) english
7 ,0 math
8 FROM class_score
9 WHERE course = 'English'
10 GROUP BY NAME
11 UNION
12 SELECT NAME
13 ,0 english
14 ,MAX (score) math
15 FROM class_score
16 WHERE course = 'Math'
17 GROUP BY NAME)
18 GROUP BY NAME
19 ORDER BY NAME
20 /

NAME ENGLISH MATH SUM_SCORE
---------- ---------- ---------- ----------
Alex 83 77 160
Lucy 82 79 161

SQL>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值