Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按第一列列出的数据库SQL查询组结果_Mysql_Sql_Group By_Pivot - Fatal编程技术网

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