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

来源:2-8 使用join优化聚合子查询

薛cf

2017-05-29 00:34

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)

写回答 关注

3回答

  • 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 字句是减小范围用的。

    薛cf

    非常感谢!

    2017-05-31 15:21:24

    共 1 条回复 >

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

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

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

    第一步 三张表join, 

    第二步: group分组

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


MySQL开发技巧(一)

DBA和开发人员都必备的技能,SQL技巧一个好程序员必备技能

148779 学习 · 123 问题

查看课程

相似问题