group by分组取组内第一条

  • 正常情况下先将子查询进行排序,然后进行分组便可以取到组内的第一条数据
  • 但是在mysql5.7之后需要在子查询排序的时候加一个limit

举个例子

  1. student表

    SELECT * FROM student
    
    id  name	age	gender
    1	张三丰	16	1
    2	灭绝师太	17	0
    3	扫地僧	18	1
    4	杨逍	19	1
    
  2. 按照gender进行分组,获取每个组内年龄最大的,很明显gender为1的age应该是19,但是事实却不是

    SELECT
    	a.* 
    FROM
    	(
    		SELECT * FROM student ORDER BY age desc
    	) a
    GROUP BY
    	a.gender
    	
    id  name	age	gender	
    2	灭绝师太	17	0	
    1	张三丰	16	1	
    
  3. 这时候如果添加一个limit,便可以得到正确的结果

    SELECT
    	a.* 
    FROM
    	(
    		SELECT * FROM student ORDER BY age desc limit 1000
    	) a
    GROUP BY
    	a.gender
    	
    id  name	age	gender	
    2	灭绝师太	17	0	
    4	杨逍	19	1
    

猜你喜欢

转载自blog.csdn.net/weixin_45121502/article/details/109101534