首页 > 数据库 > mysql教程 > 如何检索 PostgreSQL 中每个组的最早条目?

如何检索 PostgreSQL 中每个组的最早条目?

Linda Hamilton
发布: 2025-01-25 20:11:11
原创
737 人浏览过

How to Retrieve the Earliest Entry for Each Group in PostgreSQL?

在Postgresql

中,有效地选择了每个组的第一行 >本指南演示了如何在PostgreSQL中有效检索每个组的最早条目,这是使用分组数据时的常见任务。 最有效的方法利用

子句。

DISTINCT ON

>利用

子句DISTINCT ON > PostgreSQL的

子句提供了一种简洁有效的方法,可以从指定列定义的每个组中选择第一行。 它的语法很简单:

DISTINCT ON

>
<code class="language-sql">SELECT DISTINCT ON (column_list)
FROM table_name
ORDER BY column_list, ...;</code>
登录后复制
>示例:确定每个客户的首次购买

考虑带有列列),请使用此查询:

purchases idcustomer重要的考虑因素:total id

<code class="language-sql">SELECT DISTINCT ON (customer)
       id, customer, total
FROM   purchases
ORDER  BY customer, total DESC, id;</code>
登录后复制
> null处理:

如果列允许null值,则在>子句中include

以确保优先级。
  • 选择列表灵活性: 列表不限于total>或NULLS LAST中的列。 ORDER BY
  • > postgresql特异性:
  • 是一个特定于后的扩展,而不是标准SQL的一部分。 > 替代订购:SELECT> DISTINCT ON以不同于分组顺序的最终结果,嵌套查询并应用辅助ORDER BY子句。
  • 通过索引优化性能:DISTINCT ON>
  • >在
  • 上创建一个多列索引可显着提高查询性能,尤其是当每个客户的行数相对较小时。> 大型数据集的 替代方法:ORDER BY
  • >
对于每个客户的数据集,替代策略可能会更有效:>

>子征服:

>使用子查询或相关子查询为每个客户找到最大值

,然后为这些客户的最小(customer, total DESC, id)选择该行。

临时表/ctes:创建一个包含独特客户的临时表或公共表表达式(CTE),并与原始表一起连接以检索所需的行。 这种方法可能对复杂的场景有益。>

以上是如何检索 PostgreSQL 中每个组的最早条目?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板