0

好吧,我需要的查询很简单,也许在另一个问题中,但是我需要的是性能方面的东西,所以:

我有一个包含 10.000 行的用户表,该表包含 id、电子邮件和更多数据。

在另一个名为orders的表中,我有更多的行,可能有 150.000 行。

在这个订单中,我有下订单的用户的ID ,以及订单的状态状态可以是从 0 到 9(或 null)的数字。

我的最终要求是让每个用户的id、电子邮件、其他列以及状态为 3 或 7 的订单数量。它不关心它的 3 或 7,我只需要数量

但我需要以低影响的方式(或高效的方式)进行此查询。

最好的方法是什么?

我需要用 postgres 10 重新运行它。

4

1 回答 1

2

这听起来像一个joingroup by

select u.*, count(*)
from users u join
     orders o
     on o.user_id = u.user_id
where o.status in (3, 7)
group by u.user_id;

Postgres 通常在优化这些查询方面做得很好——上面假设这users(user_id)是主键——所以这应该工作得很好。

于 2020-08-14T15:07:07.267 回答