2011-05-17 44 views
0

首先是我的表group_studentSQL分组与排序

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,它会按行 group_no分隔行。在我的group_by中添加另一个列字段会做到这一点,但由于我使用的是foreach循环,所以我的视图会混淆为 。如何显示g_id 5并将其分组。

+1

请勿在堆栈网站上使用格式化代码中的选项卡。 – 2011-05-17 14:47:25

回答

1

当您执行SQL分组时,所有具有与组规格COLLAPSE匹配的字段的行都放入单个行中。通常,为该分组返回的值是遇到的第一个值,在您的案例中为g_id = 3

如果要检索所有行,并将“组”值一起使用,则应该使用SORT子句。这将返回所有行,并将排序后的值“分组”在一起。

SQL中的分组适用于您希望跨组成员使用聚合函数(总和,计数,平均值等)。排序适用于不希望汇总内容的情况,但将类似记录保存在一起。

由于您的查询中没有聚合函数,所以group子句更多地用作“select distinct”。

1

究竟是什么,你想摆脱查询?要获得如何GROUP BY工作有更好的了解,做到这一点:

SELECT GROUP_CONCAT(g_id) 
FROM (groups_student) 
group by group_no 

g_id 5只缺少,因为它“在折叠”

0

使用ORDER BY而不是GROUP BY(在这种情况下)。
了解更多关于差异here