2017-07-07 47 views
2

看看这个SQL请求:计数和内部连接

select distinct erp.users.id 
from erp.users 
inner join prod.referral_order_delivered 
on erp.users.id= prod.referral_order_delivered.user_id::uuid 
inner join erp.orders 
on erp.orders."userId"::uuid= erp.users.id 
where 
    "paidAt"::date >= '2016-06-07' 
    and "paidAt"::date <= '2017-07-07' 

比方说,我得到这样一个结果:

id 
2 
1 
4 
5 

现在我想指望这些ID的价值有多少次出现如在表中的列的用户id值erp.orders

例如,如果我有erp.orders.userId它是:

userId 
2 
2 
1 
4 
4 
5 
5 
5 

我想是要回到这个请求:

id number_of_id 
2 2 
1 1 
4 2 
5 3 

任何想法?

+0

你的代码既不是MySQL也不是SQL Server,所以我删除了这些标签。请标记您真正使用的数据库。 –

+2

提示:“GROUP BY”。 –

+0

对不起,它是postgresql。戈登会和你一起进入更多的细节吗? –

回答

4

您需要使用count()函数和group by子句。它看起来像这样:

select 
    erp.users.id 
    , count(1) 
from 
    erp.users 
    inner join prod.referral_order_delivered 
    on erp.users.id = prod.referral_order_delivered.user_id::uuid 
    inner join erp.orders 
    on erp.orders."userId"::uuid = erp.users.id 
where 
    "paidAt"::date  >= '2016-06-07' 
    and "paidAt"::date <= '2017-07-07' 
group by 
    erp.users.id 
+0

非常感谢!它似乎现在工作! –

+2

@MerwaneHamadi:不要忘记接受,如果它充分回答你的问题! – McGlothlin