我有两张表如下:
小组
team_id team_name group_id
10001 team_one 50001
10002 team_two 50001
10003 team_three 50002
10004 team_four 50002
10005 team_five 50003
10006 team_six 50003
10007 team_seven 50004
10008 team_eight 50004
组
group_id group_name
50001 group_one
50002 group_two
50003 group_three
50004 group_four
我想实现一个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。 如何更改它以达到我想要的效果?
答案 0 :(得分:1)
解决方案相当简单 - 我不确定为什么@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。
答案 1 :(得分:0)
我假设您宁愿使用ORDER BY,而不是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 ORDER BY teams.group_id
答案 2 :(得分:0)
在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的使用,因此选择列表可以引用GROUP BY子句中未命名的非聚合列。这意味着前面的查询在MySQL中是合法的。您可以通过避免不必要的列排序和分组来使用此功能来获得更好的性能。但是,当GROUP BY中未命名的每个非聚合列中的所有值对于每个组都相同时,这非常有用。服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的。 ...
答案 3 :(得分:0)
如果您不介意在结果中添加一些额外数据,可以使用:
SELECT gr.group_name, gr.group_id, t.team_name, t.team_id FROM teams t
LEFT JOIN groups gr ON gr.group_id = t.group_id
ORDER BY gr.group_id, t.team_id
结果如下:
group_name group_id team_name team_id
group_one 50001 team_one 10001
group_one 50001 team_two 10002
group_two 50002 team_three 10003
group_two 50002 team_four 10004
group_three 50003 team_five 10005
group_three 50003 team_six 10006
group_four 50004 team_seven 10007
group_four 50004 team_eight 10008
据我所知,它基本上把你的整个桌子放在那里......但它有所有的团队蚂蚁他们的团队。您可以使用“where”来过滤您的组..或者运行查询,一组用于组,然后用于每组中的一组。