求一个sql写法,查询出团活动中参加人数最多的团id

我用的mysql,

team_activity -团活动表

team_idstart_timeend_timepeople_numgoods_id
12020-4-1 11:00:002020-4-1 12:00:001010
22020-4-1 11:00:002020-4-1 15:00:00515
32020-4-1 11:00:002020-4-1 16:00:00318

team_found -具体的团表,

found_idteam_idjoin-已参加人数status 状态0-待成团;1-拼团成功,2-拼团失败;
1160
2130
3230
4251

怎样查出来这种结果,前端需要一个list,团活动商品展示。顺带着,把某个活动的,参团人数最多的具体团id,也要带过去。如果,某个活动没有开团,是0

list需要这种结果:

team_idgoods_namegoods_idfound_id
1苹果101
2橘子154
3黄瓜180

实际表比这个复杂些,我简化了。

活动team_id=1,是团苹果,然后经过查询,发现有2个团,再团这个苹果,团最多的人数是6,对应的具体团found_id=1

活动team_id=2,是团橘子,然后经过查询,发现有2个团,再团这个橘子,团最多的人数是5,对应的具体团found_id=4

活动team_id=3,是团黄瓜,然后经过查询,发现有0个团,再团这个黄瓜,团最多的人数是0,对应的具体团found_id=0 ,就是没有人开黄瓜团,所以是0。

还有一种特殊情况,如果参与人数最多的团,有多个团,目前参团人数都相等,那么随机取一个具体团id。比如团活动是5,团商品玫瑰,发现目前有2个团在团,并且参团人数还相等。那只能随机取一个,或者可以这样,limit 1,就取第1条的found_id。

搞半天弄不出来,太笨了。

一般这种情况,我是用php,先拆分这个需求,先读出所有团活动列表,然后再foreach循环判断,里面再嵌套sql,逐个比较。目前看来比较low。要执行很多次sql语句,效果低下。现在想用,sql语句一下查出来。

阅读 2.7k
1 个回答

select t.team_id,t.goods_id,t.people_num,f.team_id,f.join,f.found_id
,g.* from ls_goods g left join ls_team_activity t on g.id = t.goods_id and t.del=0 left join (select id as found_id,team_id,max(join) as join FROM ls_team_found GROUP BY team_id) f on f.team_id = t.team_id

我搞出来一个这个,好像是对了,还差点,要处理一下 null

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题