【发布时间】:2015-11-03 15:04:23
【问题描述】:
我有下一张表(仅显示重要的列):
clients: id, created_at
orders: id, client_id, created_at
我正在尝试选择所有有 1 个订单的客户。
SELECT c.phone, c.created_at, o.created_at
FROM clients c
JOIN orders o ON c.id = o.client_id
GROUP BY c.phone, c.created_at, o.created_at
HAVING COUNT(o.id) = 1
当我只有 27,000 个客户时获得 33k+ 行。
我做错了什么?
我应该在 SQL 中更改什么?
【问题讨论】:
-
部分客户有多个订单。
-
当然,我知道。但我只需要选择有 1 个订单的客户。这就是使用组/聚合函数的原因。
-
是吗?和?每个订单大概有不同的
created_at日期,因此根据您的分组规则,每个订单都是唯一记录,因此计数为 1。换句话说,除非您更改您的group by,否则您的having count()=1是无用的,因为所有结果行的计数均为 1。 -
@MarcB 所以,看来我需要用子查询替换 join 或 ..?
-
没有。只需消除订单表上的任何分组。您只需要按 client.id 分组
标签: sql postgresql aggregate