首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择计数、内部联接和where语句

选择计数、内部联接和where语句
EN

Stack Overflow用户
提问于 2017-07-08 13:20:51
回答 4查看 46关注 0票数 0

这是erp.orders:

代码语言:javascript
复制
userId  paidAt
1       2017-06-30
1       2017-06-18
2       2017-06-07
4       2017-06-07
3       2017-01-01
2       2017-01-01
2       2017-01-01
2       2017-01-01

我是prod.referral_order_delivered

代码语言:javascript
复制
user_id
1
2

这一请求:

代码语言:javascript
复制
select distinct erp.orders."userId", count(erp.orders."userId")
from erp.orders
inner join prod.referral_order_delivered
on erp.orders."userId"::uuid = prod.referral_order_delivered.user_id::uuid
where
   erp.orders."paidAt"::date >= '2017-06-07'
   and erp.orders."paidAt"::date <= '2017-07-07'
group by erp.orders."userId"

会给我这个结果:

代码语言:javascript
复制
userId  count
1       2
2       1

这不是我想要的结果。在2017-06-07和2017-07-07年间支付的ids中,还有表prod.referral_order_delivered中的ids,我想计算一下它们在表erp.orders中总共出现了多少次。在我目前的请求中,我只计算2017-06-07至2017-07-07.

我想要的结果是:

代码语言:javascript
复制
userId  count
1       2
2       4

看看如何排除userId 3和4。这真的很重要。你能修改一下我的要求吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-08 13:37:11

试着解决你的问题。你想:

在2017-06-07和2017-07-07年间支付的in,这些in在表prod.referral_order_delivered中

计算它们在表erp.orders中总共出现了多少次

你已经有了前者:

代码语言:javascript
复制
select distinct erp.orders."userId"
from erp.orders inner join prod.referral_order_delivered
on erp.orders."userId"::uuid = prod.referral_order_delivered.user_id::uuid
where
   erp.orders."paidAt"::date >= '2017-06-07'
   and erp.orders."paidAt"::date <= '2017-07-07'

后者只使用内部选择:

代码语言:javascript
复制
select erp.orders."userId", count(erp.orders."userId")
from erp.orders
where
   erp.orders."userId" in (select ...)
group by erp.orders."userId"
票数 1
EN

Stack Overflow用户

发布于 2017-07-08 13:28:23

不如:

代码语言:javascript
复制
     SELECT erp.orders."userId" 
           ,count(erp.orders."paidAt")
       FROM erp.orders
 INNER JOIN prod.referral_order_delivered
         ON erp.orders."userId"::uuid = prod.referral_order_delivered.user_id::uuid
        AND erp.orders."paidAt"::date >= '2017-06-07'
        AND erp.orders."paidAt"::date <= '2017-07-07'
   GROUP BY erp.orders."userId"
票数 1
EN

Stack Overflow用户

发布于 2017-07-08 13:36:02

使用having子句而不是where子句:

代码语言:javascript
复制
select o."userId", count(o."userId")
from erp.orders o inner join
     prod.referral_order_delivered rod
     on o."userId"::uuid = rod.user_id::uuid
group by o."userId"
having sum( (o."paidAt"::date >= '2017-06-07' and o."paidAt"::date <= '2017-07-07')::int) > 0;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44986697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档