我有两张表如下:
我想要实现一个sql选择,根据以下组对团队进行分组:
group_one
team_one
team_two
group_two
team_three
team_four
group_three
team_five
team_six
group_four
team_seven
team_eight到目前为止,我所做的工作如下:
SELECT
teams.team_name,
teams.soft_name,
teams.group_id,
groups.group_id,
groups.group_name
FROM $table_name
INNER JOIN groups ON teams.group_id = groups.group_id
GROUP BY teams.group_id问题是,上面的查询只显示来自每个组的前四个团队。team_one,team_three,team_five,team_seven。我怎样才能改变它以达到我想要的结果呢?
发布于 2014-06-10 16:07:07
解决方案相当简单--我不知道为什么@MKhalidJunaid说不推荐这样做:
在多列上使用GROUP BY,如下所示:
SELECT
teams.team_name,
teams.soft_name,
teams.group_id,
groups.group_id,
groups.group_name
FROM $table_name
INNER JOIN groups ON teams.group_id = groups.group_id
GROUP BY teams.group_id, teams.team_id有关完整的描述,请参见This Answer。
发布于 2014-06-10 13:08:33
我想你宁愿按顺序排序,而不是按这样分组:
SELECT teams.team_name, teams.soft_name,teams.group_id, groups.group_id, groups.group_name FROM $table_name INNER JOIN groups ON teams.group_id = groups.group_id ORDER BY teams.group_id发布于 2014-06-10 13:10:27
在mysql列中,结果中的名称必须是唯一的,否则MYSQL会选择其中之一并呈现出来。
SELECT teams.team_name, teams.soft_name,teams.group_id as Team_Group_ID,
groups.group_id as Group_group_ID, groups.group_name
FROM $table_name
INNER JOIN groups
ON teams.group_id = groups.group_id 这就是你丢失数据的原因:http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html
简单地说,mySQL组的扩展行为必须谨慎使用。您必须按返回的所有列分组,这将导致一个唯一的行,否则服务器将“自由地从每个组中选择任何值”。
..。MySQL扩展了GROUP BY的用法,以便select列表可以引用GROUP BY子句中未命名的非聚合列。这意味着前面的查询在MySQL中是合法的。通过避免不必要的列排序和分组,您可以使用此特性获得更好的性能。但是,当组中未命名的每个非聚合列中的所有值对于每个组都相同时,这主要是有用的。服务器可以自由地从每个组中选择任何值,因此,除非它们是相同的,否则所选择的值是不确定的。..。
https://stackoverflow.com/questions/24141665
复制相似问题