在实际业务中,有一些场景需要对一组列表数据
先分组后然后组内排序
,这时不能单纯的使用传统的group by
和order by
语句了,因为会提示xxxx字段必须在group by聚合函数中
,为了解决此问题,我们可以使用ROW_NUMBER ( ) OVER ( PARTITION BY 分组字段 ORDER BY 排序字段 DESC
语句。
需求:根据创建人分组后再按照创建时间降序排序
1、使用传统的
group by
和order by
语句
SELECT
*
FROM
"tbblayeritem"
WHERE
layerid = 'b5ee3362-5972-4d48-bcf5-828023ca665b'
GROUP BY
creator
ORDER BY
createtime DESC
提示错误
错误: 字段 "tbblayeritem.itemid" 必须出现在 GROUP BY 子句中或者在聚合函数中使用
2、使用
ROW_NUMBER ( ) OVER ( PARTITION BY 分组字段 ORDER BY 排序字段 DESC
语句
SELECT
*,
ROW_NUMBER ( ) OVER ( PARTITION BY creator ORDER BY createtime DESC )
FROM
tbblayeritem
WHERE
layerid = 'b5ee3362-5972-4d48-bcf5-828023ca665b'
结果