【问题标题】:group by in Postgres在 Postgres 中分组
【发布时间】:2015-02-06 09:01:05
【问题描述】:

我有以下订单表:

| id | user_id | order_date |
| 1  | 5       | 24/03/2014 |
| 2  | 5       | 25/02/2014 |
| 3  | 6       | 25/06/2014 | 

我想要一个查询,它返回我表中每个用户的最大 order_date。在我的示例中,结果将是:

| id | user_id | order_date |
| 1  | 5       | 24/03/2014 |
| 3  | 6       | 25/06/2014 | 

我尝试了以下查询:

select user_id, id, max(order_date) 
from order
GROUP BY cmd_user_id;

但是此代码会产生以下错误:列“order.id”必须出现在 GROUP BY 子句中或用于聚合函数中。

我不知道在这里做什么。有人能帮助我吗?

我觉得我需要一个 group by,因为这是我查询的开始。之后我想添加一些额外的条件来选择订单(例如通过特定付款方式支付的订单以及过去 10 天的订单,但我总是对过去 10 天的最大日期感兴趣)。

非常感谢您的帮助。

【问题讨论】:

  • 只需从查询中删除 id 列。

标签: sql postgresql group-by greatest-n-per-group


【解决方案1】:
select user_id, id, max(order_date) from order GROUP BY cmd_user_id;

select 和 group by 中的字段不匹配,但我认为 user_id 和 cmd_user_id 是同一个字段,这是一个错字。 无论如何,如果您使用 group by,则 select 部分中的字段必须具有聚合函数,例如 max(order_date),或者必须包含在 group by 字段中,例如 cmd_user_id。 就像 Kouber 所说,从选择部分中删除 id 字段,在其上使用聚合函数或将其包含在 group by 字段中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 2016-09-05
    • 2021-12-30
    • 2019-10-31
    相关资源
    最近更新 更多