问答详情
源自:2-8 使用join优化聚合子查询

那位大神给讲解一下语句的执行流程

select a.user_name , b.timestr , b.kills
from user1 a
join user_kills b on a.id = b.user_id
join user_kills c on c.user_id = b.user_id
group by a.user_name , b.timestr , b.kills
having b.kills = MAX(c.kills)

提问者:薛cf 2017-05-29 00:34

个回答

  • qq_为了美好的明天
    2017-05-31 11:13:11
    已采纳

    (user1 a
    join user_kills b on a.id = b.user_id
    join user_kills c on c.user_id = b.user_id
    group by a.user_name , b.timestr , b.kills
    having b.kills = MAX(c.kills))相当于虚拟了一个表,

    然后(select a.user_name , b.timestr , b.kills from )是从这个虚拟表中挑选的。

    对于上面的虚拟表 先用两个join把三个表关联起来,group是对这个虚拟表的数据的排序,having 字句是减小范围用的。

  • 华振宇
    2018-03-14 16:18:15

    哪位大神知道MAX(c.kills)的值是怎么来的吗?

  • 慕UI8087178
    2017-12-17 20:52:22

    第一步 三张表join, 

    第二步: group分组

    第三步: hiving对分组后的结果进行筛选