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 Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)