我是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
我很感激任何帮助。欢呼声。
答案 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等数字,而不是在每个作业中重新编号。