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

where b.user_id = c.user_id

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 一样的,加了和不加结果会不一样

提问者:破裂人偶 2018-07-06 16:24

个回答

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

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

  • 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中最大的值,这个值是唯一的