GROUP BY 并将列值放入单行列

GROUP BY and get the columns values into single row column

我在考虑是否可以获取使用 GROUP BY 房间的所有值。例如,我有一个 table 命名为 subject 、 room 和 classroom

table 主题

   subject_id | subject_name
    -------------------
        1     | math
        2     | science
        3     | english

table房间

    room_id | room_name
   -------------------
       1    | sunflower
       2    | cornflower
       3    | redflower

table 教室

    id | room_id | subject_id 
   -------------------
    1  | 1       | 1          
    2  | 1       | 2
    3  | 1       | 3

现在查询。不确定我使用的查询是否正确或查询是否足够..但输出的查询显示不期望

SELECT * FROM classroom 
LEFT JOIN subject ON classroom.subject_id = subject.subject_id
LEFT JOIN room ON classroom.room_id = room.room_id 
GROUP BY room_name

现在我想要这样的输出

教室

room_name | subject_name 
------------------------
sunflower | math
          | science
          | english

它应该按向日葵分组为一行列

GROUP BY 旨在减少行数并为这些行启用聚合。在您的情况下,以下查询 without group by 产生:

SELECT room_name, subject_name
FROM classroom 
LEFT JOIN subject ON classroom.subject_id = subject.subject_id
LEFT JOIN room ON classroom.room_id = room.room_id 

+-----------+--------------+
| room_name | subject_name |
+-----------+--------------+
| sunflower | english      |
| sunflower | math         |
| sunflower | science      |
+-----------+--------------+

所以使用 GROUP BY 没有多大意义,但如果我们这样做,结果如下:

SELECT room_name, subject_name
FROM classroom 
LEFT JOIN subject ON classroom.subject_id = subject.subject_id
LEFT JOIN room ON classroom.room_id = room.room_id 
GROUP BY room_name, subject_name

+-----------+--------------+
| room_name | subject_name |
+-----------+--------------+
| sunflower | english      |
| sunflower | math         |
| sunflower | science      |
+-----------+--------------+

请注意,每一行的值都显示在两列中。这是预期和期望的。

GROUP BY 不是 一种“演示”工具,它会抑制第一列中值的输出,这是一种“报告工具”或“演示”层”将有望处理。

demo