首先,这是我的表group_student
中的行/数据g_id |user_id |group_no |is_leader
4 1 3 0
3 9 5 0
5 10 5 0
6 11 1 0
我在将表格中的行分组时遇到了一些问题。现在我正在使用它 脚本。
SELECT *
FROM (groups_student)
group by group_no
它给了我这个结果:
g_id |user_id |group_no |is_leader
6 11 1 0
4 1 3 0
3 9 5 0
缺少g_id 5。我想如果你使用group by它会按行分隔行 group_no。在我的group_by中添加另一个列字段会这样做,但它会搞砸 我的观点,因为我使用的是foreach循环。如何显示g_id 5并将其分组。
答案 0 :(得分:1)
执行SQL分组时,所有包含与组规范COLLAPSE匹配的字段的行都将成为一行。通常,为该分组返回的值是遇到的第一个值,在您的情况下是g_id = 3
。
如果要检索所有行,并将“group”值放在一起,则应使用SORT子句。这将返回所有行,并将排序值“分组”在一起。
在SQL中进行分组是为了在组成员中使用聚合函数(求和,计数,平均值等)。排序适用于您不想聚合的事情,但保留相似的记录。
由于您的查询中没有聚合函数,因此group子句更像是“select distinct”。
答案 1 :(得分:1)
您想要退出查询究竟是什么?为了更好地了解GROUP BY
的工作原理,请执行以下操作:
SELECT GROUP_CONCAT(g_id)
FROM (groups_student)
group by group_no
g_id
5只是因为它被“折叠”而丢失了。
答案 2 :(得分:0)
使用ORDER BY而不是GROUP BY(在这种情况下) 阅读有关差异的更多信息here。