MySQL根据字段进行分组后组内排序
要求:
根据status进行划分组,再从组内选择一个字段进行排序
这里我们使用更新时间update_time
进行降序排序
- 分组操作:
根据status
进行分组 通过over(partition by status)
进行分组操作 - 组内排序:
根据update_time
进行组内排序 ,在分组操作的基础上添加排序,sql语句为:over(partition by status order by update_time desc
desc为降序,asc为升序,可以根据需求自行选择。
完整SQL语句如下:
select a.id as 功能编号, a.function_name as 功能名称,
a.content as 功能详细,a.create_time as 创建时间,
a.update_time as 更新时间,a.status as 启用状态,a.del_flag as 删除标识,a.remark as 备注
from (select *,row_number() over(partition by status order by update_time desc)
from 数据库名称
where del_flag="0") aa //筛选掉已被删除的数据(0代表未删除,2代表已删除)
这里的
ROW_NUMBER()
必须添加上去,该函数分别应用于每个分区,并重新初始化每个分区的行号
PARTITION BY
子句将结果集划分为分区
ORDER BY
子句定义结果集的每个分区中的行的逻辑顺序。ORDER BY
子句是必需的,因为ROW_NUMBER()
函数对顺序敏感。
查询结果:
核心语句就是row_number() over(partition by status order by update_time desc)
该sql语句进行分组再组内排序操作。