Mysql 按第一列列出的数据库SQL查询组结果
我需要查询方面的帮助,我想按前两列对结果行进行分组,但我不知道如何继续 我的问题Mysql 按第一列列出的数据库SQL查询组结果,mysql,sql,group-by,pivot,Mysql,Sql,Group By,Pivot,我需要查询方面的帮助,我想按前两列对结果行进行分组,但我不知道如何继续 我的问题 SELECT student_number, homework_name, homework_points FROM student, homework WHERE student.studentid = homework.studentid 下面是我的查询结果 student_number homework_name homework_points -------------- ----
SELECT student_number, homework_name, homework_points
FROM student, homework
WHERE student.studentid = homework.studentid
下面是我的查询结果
student_number homework_name homework_points
-------------- ------------- ---------------
7554 Homework 1 22.5
7554 Homework 2 16.0
7677 Homework 1 36.0
7677 Homework 2 14.5
我如何转换查询以获得这样的结果
student_number Homework 1 Homework 2
-------------- ------------- ---------------
7554 22.5 16.0
7677 36.0 14.5
任何帮助都将不胜感激
谢谢 使用时的用例
SELECT student_number,
max(case when homework_name='Homework 1' then homework_points end) as Homework1,
max(case when homework_name='Homework 2' then homework_points end) as Homework2
FROM student inner join homework
on student.studentid = homework.studentid
group by student_number
你可以在桌上做一些作业
SELECT s.student_number
, a.homework_points AS `Homework 1`
, b.homework_points AS `Homework 21`
FROM student s
LEFT JOIN homework a ON s.studentid = a.studentid
and a.homework_name =' Homework 1'
left JOIN homework b ON s.studentid = b.studentid
and b.homework_name =' Homework 2'
ORDER BY s.student_number
首先,您确实应该使用适当的连接而不是where子句来进行连接:
SELECT student_number, homework_name, homework_points
FROM student join homework on student.studentid = homework.studentid
如果您有实际问题,请尝试以下方法:
select student_name,
h1.homework_points as homework_1,
h2.homework_points as homework_2
from student s
left join homework h1
on s.studentid = h1.studentid and h1.homework_name = 'Homework 1'
left join homework h2
on s.studentid = h2.studentid and h2.homework_name = 'Homework 2'
where h1.homework_id is not null or h2.homework_id is not null
注意使用左连接是因为某个学生可能只做了两个家庭作业中的一个。我认为其他答案是正确的 但是,我觉得您并不是在寻找硬编码的列列表。如果这是您想要的,那么您正在寻找一个“Pivot”SQL语句
在SQL Server(作为PIVOT)或PostgreSQL(作为交叉表)中有一些实现,但我在MySQL或MariaDB中没有看到任何实现。
认真考虑应用程序代码中的数据显示问题。这里有许多问题,所以在MySQL中有答案。这个问题每天都会被问到。SELECT student_number, homework_name, homework_points
FROM student join homework on student.studentid = homework.studentid
select student_name,
h1.homework_points as homework_1,
h2.homework_points as homework_2
from student s
left join homework h1
on s.studentid = h1.studentid and h1.homework_name = 'Homework 1'
left join homework h2
on s.studentid = h2.studentid and h2.homework_name = 'Homework 2'
where h1.homework_id is not null or h2.homework_id is not null