2014-12-02 71 views
0

Thare两个表:Postgres的 - 功能计数

select "PRD_ID", "PRD_AUDIT_RD", "PRS_ID", "PRS_AUDIT_RD" from lct_products 
left outer join lct_prd_properties on "PRD_ID" = "PRS_PRD_ID" 
where "PRD_AUDIT_RD" is null 

结果:

"PRD_ID", "PRD_AUDIT_RD", "PRS_ID", "PRS_AUDIT_RD" 
18;"";57;"2014-09-15 22:48:37.39" 
18;"";60;"2014-09-16 17:40:32.016" 
18;"";71;"2014-09-19 22:00:31.289" 
18;"";72;"2014-10-16 23:35:50.125" 
18;"";58;"2014-10-17 11:23:51.643" 
11;"";83;"2014-12-02 13:41:19.503" 
11;"";82;"2014-12-02 13:42:09.677" 
18;"";59;"2014-12-02 13:44:23.22" 
14;"";85;"2014-12-02 13:53:00.428" 
14;"";84;"2014-12-02 13:58:12.492" 
14;"";87;"2014-12-02 14:09:21.304" 
14;"";86;"2014-12-02 14:15:15.236" 
25;"";;"" 
17;"";;"" 
37;"";;"" 
28;"";;"" 
30;"";;"" 
16;"";;"" 
36;"";;"" 
35;"";;"" 

我需要列出所有产品的ID和计数分配给他们每个人的特性的数量。列PRS_AUDIT_RD中的日期侵犯了先前分配给特定产品的逻辑被逻辑删除。因此,如果产品的ID = 18,我希望在列表中还包含当前分配有0个属性的信息。

查询下面不解决问题东阳它没有考虑到列PRS_AUDIT_RD:

select "PRD_ID", count("PRS_ID") from (
    select "PRD_ID", "PRD_AUDIT_RD", "PRS_ID", "PRS_AUDIT_RD" from lct_products 
    left outer join lct_prd_properties on "PRD_ID" = "PRS_PRD_ID" 
    where "PRD_AUDIT_RD" is null 
) xx group by "PRD_ID" 

,但如果我上PRS_AUDIT_RD添加条件,我不会与ID产品= 18列:

select "PRD_ID", count("PRS_ID") from (
    select "PRD_ID", "PRD_AUDIT_RD", "PRS_ID", "PRS_AUDIT_RD" from lct_products 
    left outer join lct_prd_properties on "PRD_ID" = "PRS_PRD_ID" 
    where "PRD_AUDIT_RD" is null 
    and "PRS_AUDIT_RD" is null 
) xx group by "PRD_ID" 

你知道如何做到这一点吗?

问候 米哈尔

回答

0

你必须把PRS_AUDIT_RD IS NULL子句中的连接状态,以保持它LEFT JOIN,从而返回ID=18为好。

SELECT 
    p.PRD_ID, 
    p.PRD_AUDIT_RD, 
    COUNT(pp.*) 
FROM 
    lct_products p LEFT JOIN lct_prd_properties pp 
ON 
    p.PRD_ID = pp.PRS_PRD_ID AND pp.PRS_AUDIT_RD IS NULL 
WHERE 
    p.PRD_AUDIT_RD IS NULL 
GROUP BY 
    p.PRD_ID; 
+0

它的工作原理!非常感谢 :) – Michal 2014-12-02 16:24:09