出现表中ID和另一表中所有元素的最佳方法

问题描述

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

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

在另一个名为 orders 的表中,我有更多行,也许是150.000行。

在此订单中,我拥有下订单的用户 id ,还有订单的状态状态可以是0到9之间的数字(或为空)。

我的最终要求是让每个用户都具有 id,电子邮件其他一些列以及状态为3或7的订单数。它的3或7中,我只需要数量

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

什么是最好的方法

我需要使用postgres 10在redash中运行它。

解决方法

这听起来像是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)是主键-因此它应该可以很好地工作。