首页 >数据库 >mysql教程 >如何使用不同的 ORDER BY 标准查询 PostgreSQL 中的不同行?

如何使用不同的 ORDER BY 标准查询 PostgreSQL 中的不同行?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-21 12:26:09464浏览

How to Query DISTINCT Rows in PostgreSQL with Different ORDER BY Criteria?

PostgreSQL DISTINCT 查询:处理 ORDER BY 差异

DISTINCT ON 表达式与初始 DISTINCT ON 标准不一致时,PostgreSQL 的 ORDER BY 子句可能会带来挑战。 这是因为 DISTINCT ON 选择由 DISTINCT ON 表达式定义的每个组的第一行,由 ORDER BY 子句确定。 顺序不匹配会导致错误。

要纠正此问题,DISTINCT ON 表达式通常应该是 ORDER BY 子句中的主要条件。 但是,如果首选不同的顺序,则可以使用其他方法。

唯一行选择的替代方法

不要仅仅依赖 DISTINCT ON,请考虑以下策略来根据所选顺序从每个组中检索“顶部”行:

方法 1:每组最大 N

此方法使用子查询来识别每个组内的最大值(或最小值),然后连接回原始表以检索相应的行。 这是一个例子:

<code class="language-sql">SELECT t1.* 
FROM purchases t1
JOIN (
    SELECT address_id, max(purchased_at) as max_purchased_at
    FROM purchases
    WHERE product_id = 1
    GROUP BY address_id
) t2
ON t1.address_id = t2.address_id AND t1.purchased_at = t2.max_purchased_at
ORDER BY t1.purchased_at DESC;</code>

方法二:嵌套DISTINCT ON查询

更简洁的 PostgreSQL 特定解决方案使用嵌套查询:

<code class="language-sql">SELECT * 
FROM (
  SELECT DISTINCT ON (address_id) *
  FROM purchases 
  WHERE product_id = 1
  ORDER BY address_id, purchased_at DESC
) t
ORDER BY purchased_at DESC;</code>

这些方法提供了选择唯一行的灵活性,同时保持对最终排序的控制,即使它与分组标准不同。 选择最适合您的特定需求和数据结构的方法。

以上是如何使用不同的 ORDER BY 标准查询 PostgreSQL 中的不同行?的详细内容。更多信息请关注PHP中文网其他相关文章!

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