GROUP BY 并将列值放入单行列

Posted

技术标签:

【中文标题】GROUP BY 并将列值放入单行列【英文标题】:GROUP BY and get the columns values into single row column 【发布时间】:2021-06-25 01:52:19 【问题描述】:

我正在考虑是否可以获取使用 GROUP BY room 的所有值。例如,我有一个名为 subject 、 room 和 class 的表

表格主题

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

桌子房间

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

桌子教室

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

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

SELECT * FROM clas-s-room 
LEFT JOIN subject ON clas-s-room.subject_id = subject.subject_id
LEFT JOIN room ON clas-s-room.room_id = room.room_id 
GROUP BY room_name

现在我想要这样的输出

教室

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

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

【问题讨论】:

这不是 GROUP BY 所做的。考虑处理应用代码中数据显示的问题 哦,抱歉,以为是group by。不知道能不能达到我想要的输出? 【参考方案1】:

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

SELECT room_name, subject_name
FROM clas-s-room 
LEFT JOIN subject ON clas-s-room.subject_id = subject.subject_id
LEFT JOIN room ON clas-s-room.room_id = room.room_id 

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

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

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

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

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

GROUP BY 不是一个“表示”工具,它将抑制第一列中的值输出,这是一个“报告工具”或“表示层”应该处理的东西.

demo

【讨论】:

以上是关于GROUP BY 并将列值放入单行列的主要内容,如果未能解决你的问题,请参考以下文章

hive3之执行计划(Explain)Fetch 抓取本地模式表的优化Group By笛卡尔积行列过滤

使用 group by 从一个包含批量记录的表中获取一些统计数据并将结果放入第二个表中

SQL中PIVOT 行列转换

SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

postgresql行列转换

oracle中一个表的行列转换