SQL多个组按查询,一对多关系

时间:2014-07-20 03:35:47

标签: mysql sql

我是sql的新手(并且在不经常的用户中)我有一个相对复杂的(至少从我的观点来看)查询,我没有运气写作。

我的关系如下。

人们有一份工作。人们也有一个最喜欢的爱好。

我想查询所有人(这部分很容易)。我想按照他们的工作对人们进行分组。在给予工作的分组中,我想"子组"这些人是他们最喜欢的爱好。

有谁知道如何将此查询放在一起?我真的很挣扎!

鉴于这些人的样本具有以下名称,工作和爱好

   names      obs        hobbies
Alice,      Engineer,    Baseball
Amanda,     Engineer,    Baseball
Adrian,     Engineer,    Hockey
Bill,       Engineer,    Hockey
Bob,        Teacher,     Tennis
Mike,       Teacher,     Tennis
Sansa,      Teacher,     Golf
Jeff,       Teacher,     Golf

我想要一个像这样的结果

Group A:
    subgroup i: alice, amanda
    subgroup ii: adrian, bill
Group B:
    subgroup i: bob, mike
    subgroup ii: sansa, jeff

我很感激任何帮助。欢呼声。

1 个答案:

答案 0 :(得分:2)

SQL查询返回看起来像表的结果集 - 所有行都具有相同的列。你可以按工作和爱好分组:

select job, hobby, group_concat(name) as names
from table1
group by job, hobby
order by job, hobby;

您可以使用变量枚举这些:

select (@rn := @rn + 1) as grp, job, hobby, group_concat(name) as names
from table1 cross join
     (select @rn := 0) vars
group by job, hobby
order by job, hobby;

这还够吗?它会给组1,2,3,4等数字,而不是在每个作业中重新编号。