首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询连接并根据某一列进行分组

MySQL查询连接并根据某一列进行分组
EN

Stack Overflow用户
提问于 2014-06-10 13:00:33
回答 4查看 153关注 0票数 1

我有两张表如下:

  1. 团队 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 team_seven 50004 10008 team_eight 50004
  2. 群组 group_id group_name 50001 group_one 50002 group_two 50003 group_three 50004 group_four

我想要实现一个sql选择,根据以下组对团队进行分组:

代码语言:javascript
复制
group_one
team_one
team_two

group_two
team_three
team_four

group_three
team_five
team_six

group_four
team_seven
team_eight

到目前为止,我所做的工作如下:

代码语言:javascript
复制
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。我怎样才能改变它以达到我想要的结果呢?

EN

回答 4

Stack Overflow用户

发布于 2014-06-10 16:07:07

解决方案相当简单--我不知道为什么@MKhalidJunaid说不推荐这样做:

在多列上使用GROUP BY,如下所示:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-06-10 13:08:33

我想你宁愿按顺序排序,而不是按这样分组:

代码语言:javascript
复制
  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
票数 0
EN

Stack Overflow用户

发布于 2014-06-10 13:10:27

在mysql列中,结果中的名称必须是唯一的,否则MYSQL会选择其中之一并呈现出来。

代码语言:javascript
复制
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中是合法的。通过避免不必要的列排序和分组,您可以使用此特性获得更好的性能。但是,当组中未命名的每个非聚合列中的所有值对于每个组都相同时,这主要是有用的。服务器可以自由地从每个组中选择任何值,因此,除非它们是相同的,否则所选择的值是不确定的。..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24141665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档