在PostgreSQL的GROUP BY分组中选择第一行
在PostgreSQL中,选择GROUP BY操作中每个分组的第一行是一个常见需求。为此,我们可以使用强大的DISTINCT ON
子句。
<code class="language-sql">SELECT DISTINCT ON (customer) id, customer, total FROM purchases ORDER BY customer, total DESC</code>
DISTINCT ON
子句允许我们定义哪些表达式被认为是重复项。在本例中,我们指定了customer
列,这意味着只有具有相同customer
值的行才会被视为重复项。
ORDER BY
子句定义了处理行的顺序。每个customer
组中的第一行将是总计值最高的那一行。如果有多行具有相同的最大总计值,则决定因素将是id
列定义的顺序。
关键点
DISTINCT ON
是PostgreSQL的一个扩展,允许我们指定哪些表达式确定重复项。DISTINCT ON
表达式必须与ORDER BY
子句中的前导表达式匹配。ORDER BY
子句可用于确定每个组内行的优先级。SELECT
列表中包含不在DISTINCT ON
或ORDER BY
子句中的表达式。customer
、total
和id
列的,顺序与查询相同的列的多列索引将提供最佳性能。附加说明
对于customer
列基数较高的数据(每个客户少量的行),DISTINCT ON
方法非常高效。但是,对于customer
列基数较低的数据(每个客户大量的行),其他查询技术可能更高效。
以上是如何在 PostgreSQL GROUP BY 查询中选择每个组的第一行?的详细内容。更多信息请关注PHP中文网其他相关文章!