这个查询用 SQL 怎么写

2015-03-16 19:50:22 +08:00
 AsterN

数据库:
姓名  课程  成绩
小明  语文  98
小明  数学  87
小明  地理  88
小明  历史  76
小军  语文  75
小军  数学  67
小军  地理  88
小军  历史  59
小红  语文  98
小红  数学  66
小红  地理  88
小红  历史  77

查询结果:
姓名  语文  数学  地理  历史
小明  98   87   88   76
小军  75   67   88   59
小红  98   66   88   77

2955 次点击
所在节点    MySQL
4 条回复
Yannis1990
2015-03-16 20:36:32 +08:00
angelo_peng
2015-03-16 20:49:07 +08:00
doushini
2015-03-16 23:07:15 +08:00
行转列的问题
Sight4
2015-03-17 12:53:01 +08:00
可以使用SUM-IF来解决,例如:

SELECT
`姓名`,
SUM(IF(`课程`='语文', score, 0)) AS `语文`,
SUM(IF(`课程`='数学', score, 0)) AS `数学`,
SUM(IF(`课程`='地理', score, 0)) AS `地理`,
SUM(IF(`课程`='历史', score, 0)) AS `历史`
FROM 表名 GROUP BY `姓名`

重点是首先,课程的名字不能错,否则会统计不到,另外就是,如果同一张表中存在重复记录,会累加统计,所以,一般会加上其他限定条件,比如 考试时间,或者批次等等来区分

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177340

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX