实现mysql一对多查询

作者: 白云飞 分类: mysql 发布时间: 2017-05-17 13:43 阅读:

今天做项目,遇到了一个问题。就是两张表,如下的样子,score表记录学生成绩:

users表记录学生的信息:

如果我们按照传统的连表查询的话:

select users.id,name,class_name,score from users LEFT JOIN score on users.id = score.u_id;

执行之后,得到如下的结果:

id      name  class_name   score
1	小明	数学	    86
1	小明	语文	    85
1	小明	英语	    78
2	小李	数学	    87
2	小李	英语	    75
2	小李	语文	    77
2	小李	语文	    77

这并不是我需要的结果,我想要的是如下的样子:

那该如何查询呢?通过各种搜索,找到了一种解决的方法,特此记录。

select id,name,math,english,chinese from users left JOIN 
(select u_id,max(case class_name when '数学' then `score` else 0 end) math,max(case class_name when '英语' then `score` else 0 end) english,
max(case class_name when '语文' then `score` else 0 end) chinese
from score GROUP BY u_id) scores on users.id = scores.u_id;

 

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。