Postgresql 按postgres中列的平均值排序的最有效方法

Postgresql 按postgres中列的平均值排序的最有效方法,postgresql,Postgresql,我知道有一种方法可以做到这一点,但我很想知道是否有一种“最好”的方法可以做到这一点 假设我有这张桌子 名称 日期 价值 特洛伊 2021-04-21 1. 特洛伊 2021-04-20 2. 特洛伊 2021-04-19 3. 亚历克 2021-04-21 3. 亚历克 2021-04-20 4. 亚历克 2021-04-19 5. 平均值的计算可以通过在查询中进行聚合来完成,该查询按个人分组,然后将其连接到表中,或者使用AVG()窗口函数来完成,该函数可以直接用于ORDER by子句中,我相信

我知道有一种方法可以做到这一点,但我很想知道是否有一种“最好”的方法可以做到这一点

假设我有这张桌子

名称 日期 价值 特洛伊 2021-04-21 1. 特洛伊 2021-04-20 2. 特洛伊 2021-04-19 3. 亚历克 2021-04-21 3. 亚历克 2021-04-20 4. 亚历克 2021-04-19 5.
平均值的计算可以通过在查询中进行聚合来完成,该查询按个人分组,然后将其连接到表中,或者使用
AVG()
窗口函数来完成,该函数可以直接用于
ORDER by
子句中,我相信它的性能更好:

SELECT * 
FROM tablename
ORDER BY AVG(Value) OVER (PARTITION BY Name) DESC, Name, Date

请参阅。

您能分享预期输出吗?当然@Mureinik我添加了预期输出,但基本上它是同一个表,只是“Alec”先被订购,因为他的值列的平均值会大于TroysSo。正如我在问题中所说,我知道有一种方法可以做到这一点,但是我想我正在寻找更多的解释,为什么这是最有效的方法,因为我的数据集非常大。或者,如果这只是执行此操作的公认方式,您也可以这么说,但我要寻找的不仅仅是“这就是您的操作方式”以及最后一个“订购方式”应该是
Date DESC
而不是
Value
@AlecDonaldMather您没有在问题中指定要按日期而不是值排序的行,因此我不得不猜测。@AlecDonaldMather在我编辑的答案中看到了一个简短的解释。是的,这很好,我知道我没有指定它。我是gunna,我接受这个答案,因为这也是我想做的两种方法,但是“我相信它对性能更好”仍然不能真正帮助我理解为什么lol。但是在思考了更多之后,我无法想象另一种方法会更快。。。