首页 >数据库 >mysql教程 >如何在 PostgreSQL GROUP BY 查询中选择每个组的第一行?

如何在 PostgreSQL GROUP BY 查询中选择每个组的第一行?

DDD
DDD原创
2025-01-25 20:21:10973浏览

How to Select the First Row of Each Group in a PostgreSQL GROUP BY Query?

在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 ONORDER BY子句中的表达式。
  • 查询使用的索引会显著影响性能。一个跨越customertotalid列的,顺序与查询相同的列的多列索引将提供最佳性能。

附加说明

对于customer列基数较高的数据(每个客户少量的行),DISTINCT ON方法非常高效。但是,对于customer列基数较低的数据(每个客户大量的行),其他查询技术可能更高效。

以上是如何在 PostgreSQL GROUP BY 查询中选择每个组的第一行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn