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