簡體   English   中英

SQL:計算來自兩個不同表的兩個不同列

[英]SQL: Count two different columns from two different tables

我試圖獲取兩個不同表的resource列的不同計數,然后顯示每個項目ID的比較。 現在,此查詢為我提供了兩個表的相同計數值。

select 
    t1.PRJCT_ID,
    count(t1.RSRC_ID) as TBL1_RSRC_CNT,
    t2.PRJCT_ID,
    count(t2.RSRC_ID) as TBL2_RSRC_CNT
from
    DATA_TABLE_1 t1
LEFT OUTER JOIN 
    DATA_TABLE_2 t2 on t1.PRJCT_ID = t2.PRJCT_ID
GROUP BY
    t1.PRJCT_ID, t2.PRJCT_ID
order by 1

當然,您將獲得相同的計數,即對同一張表的列進行計數(這是由聯接完成的,但仍然是一個矩形表)。

您要做的是使用子查詢。 首先獲取每個項目ID的列表(從表中獲取,或者從兩個表中解析一個並集解析,但這表明數據庫規范化不佳),然后獨立查詢表的數量:

select p.ID,
  (select count(*) from DATA_TABLE_1 t1 where t1.ID=p.ID) Count1,
  (select count(*) from DATA_TABLE_2 t2 where t2.ID=p.ID) Count2
from projects p

注意:我想您在某處有一個PROJECT表。 我認為最好的方法是使用兩個子查詢。 這樣,您將擁有所有項目,甚至沒有任何資源的項目。 就像是:

SELECT 
    p.PRJCT_ID,
    ( SELECT COUNT(*) FROM DATA_TABLE_1 t1 WHERE t1.PRJCT_ID = p.PRJCT_ID ) AS TBL1_RSRC_CNT,
    ( SELECT COUNT(*) FROM DATA_TABLE_2 t2 WHERE t2.PRJCT_ID = p.PRJCT_ID ) AS TBL2_RSRC_CNT
FROM PROJECT p
ORDER BY p.PRJCT_ID

您還可以將CASE子句與聚合SUM函數配對使用。

select 
    t1.PRJCT_ID,
    SUM( CASE WHEN t1.RSRC_ID IS NULL THEN 0 ELSE 1 END ) as TBL1_RSRC_CNT,
    t2.PRJCT_ID,
    SUM( CASE WHEN t2.RSRC_ID IS NULL THEN 0 ELSE 1 END ) as TBL2_RSRC_CNT
from
    DATA_TABLE_1 t1
LEFT OUTER JOIN 
    DATA_TABLE_2 t2 on t1.PRJCT_ID = t2.PRJCT_ID
GROUP BY
    t1.PRJCT_ID, t2.PRJCT_ID
order by 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM