mysql怎样做分类查询

mysql怎样做分类查询, 如统计每个学生成绩, 语文成绩分数单独统计是一类, 其他成绩分数总和是一类。 这样的sql查询应该怎么写

student.png

评论区

杜福忠

2021-01-16 14:46

SELECT a.username , a.mark AS '语文', b.mark AS '其他'
FROM 成绩表 a
LEFT JOIN (
SELECT z.username, SUM(z.mark) mark FROM 成绩表 z WHERE z.course != '语文' GROUP BY z.username
) b ON a.username = b.username
WHERE a.course = '语文'
好像是这样,纵转横嘛

绿色的小苹果

2021-01-16 14:54

@杜福忠 我试下 感谢

绿色的小苹果

2021-01-16 16:05

@杜福忠 当添加一个只有数学成绩, 没有语文成绩的学生。 在使用上述查询的时候会查不到没有语文成绩的人

BTMTimor

2021-01-16 16:12

绿色的小苹果

2021-01-16 16:19

@BTMTimor left join也不行

杜福忠

2021-01-16 17:25

SELECT a.username , b.mark AS '其他' , c.mark AS '语文'

FROM ( SELECT username 成绩表 GROUP BY username)a

LEFT JOIN (
SELECT username, SUM(mark) mark FROM 成绩表 WHERE course != '语文' GROUP BY username
) b ON a.username = b.username

LEFT JOIN (
SELECT username, SUM(mark) mark FROM 成绩表 WHERE course = '语文' GROUP BY username
) c ON a.username = c.username

@BTMTimor 说的没错,再加一个 LEFT JOIN 即可,都是纵转横写法

SuperEric

2021-01-18 16:13

enderjo

2021-01-20 15:48

最近刚好也写一个类似的统计,用的是SUM语法,可以参考下
SELECT
username,
SUM(
IF
( course = '语文', mark, 0 )) yuwen,
SUM(
IF
( course = '数学', mark, 0 )) shuxue,
SUM(
IF
( ( course <> '语文' AND course <> '数学' ), mark, 0 )) qita
FROM
test_score
GROUP BY
username

绿色的小苹果

2021-01-21 11:57

@enderjo 没用过这个语法, 但是提示有错误