gpt4 book ai didi

mysql - 按排名对不同表的结果进行分组

转载 作者:行者123 更新时间:2023-11-29 18:11:04 26 4
gpt4 key购买 nike

我确信我不是第一个需要这样做的人,但我找不到类似的问题来解释其中的细微差别。

我有 3 个表(fav_foodfav_colorfav_place),它们都遵循类似的模式:

userid   |   label    |  rank   |
=================================
1 | red | 1
1 | green | 2
1 | orange | 3
2 | blue | 1
2 | red | 2
...

对于给定的表,每个表的每个用户 ID 最多有 3 个项目,但某些用户的项目可能少于 3 个,而其他用户可能没有项目。即,用户 10 可能有 2 种最喜欢的颜色、1 种最喜欢的食物和 0 个最喜欢的地方。

我正在寻找一个可以像这样输出我的数据的查询:

userid  |   fav_food  |  fav_place  |  fav_color  |  rank
===========================================================
1 | pizza | New York | red | 1
1 | burgers | NULL | green | 2
1 | NULL | NULL | orange | 3
2 | tacos | Chicago | blue | 1
2 | burgers | Orlando | red | 2
...

基本上,所有排名 1 的项目一起排名,排名 2 的项目一起排名,排名 3 的项目一起排名(NULL 表示不存在该排名的项目)。

我能够使用 3 个单独的查询(每个表一个)+ 应用程序层的后处理来使其工作,但出于我个人的知识基础,我想知道是否有人知道如何在单个查询。

非常感谢!

最佳答案

@Isick,

您可以通过每个表上的 LEFT OUTER JOIN 到仅包含用户 ID 和等级的表来完成此操作。 DEMO

 select user_rank.userid, user_rank.rank, f.food, p.place, c.color from 
(
select userid, rank from fav_food
union
select userid, rank from fav_place
union
select userid, rank from fav_color
) user_rank
left outer join
( select userid, rank, label as food from fav_food) f
on user_rank.userid = f.userid and user_rank.rank = f.rank
left outer join
( select userid, rank, label as place from fav_place) p
on user_rank.userid = p.userid and user_rank.rank = p.rank
left outer join
( select userid, rank, label as color from fav_color) c
on user_rank.userid = c.userid and user_rank.rank = c.rank
order by userid, rank

关于mysql - 按排名对不同表的结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com