我正在对多个记录执行聚合函数,这些记录按公共 ID 分组。问题是,我还想导出一些其他字段,这些字段在分组记录中可能不同,但我想从其中一个记录中获取这些特定字段(第一个,根据查询的 ORDER BY)。
起点示例:
SELECT
customer_id,
sum(order_total),
referral_code
FROM order
GROUP BY customer_id
ORDER BY date_created
我需要查询推荐代码,但在聚合函数之外执行此操作意味着我也必须按该字段进行分组,这不是我想要的 - 在此示例中,我需要每个客户恰好一行。我真的只关心第一个订单的推荐代码,我很乐意丢弃任何以后的推荐代码。
这是在 PostgreSQL 中,但可能来自其他数据库的语法可能足够相似以工作。
被拒绝的解决方案:
- 不能使用 max() 或 min() 因为顺序很重要。
- 子查询一开始可能会起作用,但不能扩展;这是一个极其简化的例子。我的实际查询有几十个字段,比如我只想要第一个实例的参考代码,以及几十个 WHERE 子句,如果在子查询中重复,将成为维护的噩梦。