简介:从特定条件定义的每个组中检索顶行是常见的数据库操作。 PostgreSQL 提供了多种方法,其中 DISTINCT ON
因其效率和易用性而脱颖而出。
DISTINCT ON:强大的技术: DISTINCT ON
根据所选顺序优雅地处理每个组中第一行的选择。 您指定分组列和顺序来确定“第一”行。
语法和用法: DISTINCT ON
子句很简洁:
<code class="language-sql">SELECT DISTINCT ON (group_column1, group_column2, ...) column1, column2, ... FROM table_name ORDER BY group_column1, group_column2, ..., ordering_column;</code>
group_column1
、group_column2
、...:定义组的列。column1
, column2
, ...:要检索的列。ORDER BY
:指定每个组内的排序;根据此顺序选择第一行。说明性示例:要获取每个客户最近购买的详细信息:
<code class="language-sql">SELECT DISTINCT ON (customer_id) customer_id, purchase_date, amount FROM purchases ORDER BY customer_id, purchase_date DESC;</code>
性能增强: 虽然 DISTINCT ON
通常很高效,但索引可以显着提高性能,特别是对于大型数据集。 合适的索引是:
<code class="language-sql">CREATE INDEX purchases_idx ON purchases (customer_id, purchase_date DESC);</code>
重要注意事项:
NULL
值,请在 NULLS LAST
子句中使用 NULLS FIRST
或 ORDER BY
以获得可预测的结果。DISTINCT ON
顺序不同,请将查询包装在另一个带有单独 SELECT
子句的 ORDER BY
语句中。结论: DISTINCT ON
提供了一种稳健且高效的方法来从 PostgreSQL 中的每个组中选择第一行。 战略索引进一步优化性能,使其成为数据分析和聚合的宝贵工具。
以上是如何使用Distine On有效地选择PostgreSQL中每个组的第一行?的详细内容。更多信息请关注PHP中文网其他相关文章!