where b.user_id = c.user_id

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

破裂人偶

2018-07-06 16:24

select a.user_name,b.timestr,b.kills from user1 as a left join user_kills as b on a.id = b.user_id

where b.kills = (select max(c.kills) from user_kills as c where b.user_id = c.user_id);


为什么 b,c 表 user_id 一样的,加了和不加结果会不一样

写回答 关注

2回答

  • jamieacejiang
    2018-07-18 11:31:55
    已采纳

    加了where b.user_id = c.user_id这个条件,max(c.kills)是可变的(会求出3个userid的各个的最大值,然后去外面卡where条件),不加,这个值是固定的(是这些userid里最大的一个值,无意义)。

    破裂人偶

    非常感谢!

    2018-07-18 12:16:29

    共 1 条回复 >

  • 0_菇凉将我作甚_0
    2018-12-02 11:13:11

    where b.kills = (select max(c.kills) from user_kills as c where b.user_id = c.user_id);括号外的where b.kills 依次取数,但是只要满足括号内where b.user_id = c.user_id,即把同类ID最大的kills返回,相当于有一个分组条件;若不加上的话,只返回kills中最大的值,这个值是唯一的

MySQL开发技巧(一)

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

148779 学习 · 123 问题

查看课程

相似问题