如何基于聚合数据对表行排序?求替代自连接的简洁方案
更简洁的排序方案:用窗口函数替代自连接
嘿,我有个比自连接清爽得多的方法,用窗口函数就能轻松实现你要的排序需求!
思路说明
我们只需要给每一行计算出它所属label的data总和,把这个总和作为第一排序依据(升序),再用data本身作为同label内的排序依据(升序)就行,全程不用复杂的表关联。
实现代码
SELECT label, data FROM sampleTable ORDER BY -- 计算每个label的data总和,作为排序的第一关键字 SUM(data) OVER (PARTITION BY label) ASC, -- 同label内按data本身升序排列 data ASC;
效果验证
这个语句会先按每个label的data总和从小到大排序:
c总和3 → 排第一d总和4 → 排第二a总和6 → 排第三(内部按data 1、5排序)b总和8 → 排第四(内部按data 2、6排序)
最终输出和你期望的结果完全一致,而且代码比自连接简洁太多啦!
内容的提问来源于stack exchange,提问作者Linga Siva
相关产品推荐
相关产品推荐

