Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一个表上ID和另一个表中所有元素出现的最佳方法_Sql_Postgresql_Redash - Fatal编程技术网

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

Sql 一个表上ID和另一个表中所有元素出现的最佳方法,sql,postgresql,redash,Sql,Postgresql,Redash,嗯,我需要的查询很简单,可能是另一个问题,但我需要的是性能,所以: 我有一个10.000行的用户表,该表包含id、电子邮件和更多数据 在另一个名为orders的表中,我有更多的行,可能是150.000行 在这个订单中我有下订单的用户的id,还有订单的状态。状态可以是0到9(或空)之间的数字 我的最终要求是让每个用户都具有id、电子邮件、其他列以及状态为3或7的订单数量。它不关心其3或7,我只需要数量 但我需要以一种低影响的方式(或性能方式)执行此查询 最好的方法是什么 我需要在postgres

嗯,我需要的查询很简单,可能是另一个问题,但我需要的是性能,所以:

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

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

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

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

但我需要以一种低影响的方式(或性能方式)执行此查询

最好的方法是什么


我需要在postgres 10的redash中运行此操作。

这听起来像是一个
加入
分组:

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在优化这些查询方面通常做得很好——上面假设
用户(user_id)
是主键——因此这应该可以很好地工作。

这听起来像是一个
加入
分组依据

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\u id)
是主键——因此这应该可以很好地工作。

如果
o.status in(3,7)
按原样移动到
join
子句中,或者扩展到
(o.status==3或o.status==7)
?有没有一种方法可以预测没有
解释-分析
,哪一种更快?这将是相同的,从性能角度来看。Postgres足够聪明,可以将所有这些视为等价的。如果我想将其排除在外,我的意思是当我想要那些不是status 3的人时,该怎么办如果将(3,7)
中的
o.status按原样移动到
join
子句中,或者扩展到
(o.status==3或o.status==7),会更快吗
?有没有一种方法可以预测哪一种更快,而无需解释和分析
?它将是相同的,从性能角度来看。Postgres足够聪明,可以将所有这些都视为等价的。如果我想将其排除在外,我的意思是当我想要那些不是状态3的人时,情况会怎样