簡體   English   中英

使用兩個 Count() 函數而不改變結果

[英]Using two Count() functions without changing the results

SELECT CARRIER.CARRIERID, PLAN.PLANID, PLNDESCRIPTION,
  COUNT(MEMBER.PLANID) AS MBRCNT
FROM CARRIER
LEFT OUTER JOIN PLAN
   ON CARRIER.CARRIERID = PLAN.CARRIERID
LEFT OUTER JOIN MEMBER
   ON PLAN.PLANID = MEMBER.PLANID
GROUP BY CARRIER.CARRIERID, PLAN.PLANID, PLNDESCRIPTION
ORDER BY CARRIER.CARRIERID;

結果是

CARR     PLANID PLNDESCRIPTION                 MBRCNT
 ---- ---------- ----------------------------------- ----------
 ANTH          4 Single SuperMed                              6
 ANTH          5 2-Party SuperMed                             4
 ANTH          6 Family SuperMed                              7
 BCBS          1 Single Basic Medical                         9
 BCBS          2 2-Party Basic Medical                       15
 BCBS          3 Family Basic Medical                        11
 DLT           7 Single Dental Only                           6
 DLT           8 Family Dental Only                           0
 MM           10 Single SuperMed with Dental                  5
 MM           11 2-Party SuperMed with Dental                 0
 MM           12 Family SuperMed with Dental                  2
 NWD           9 Life Only                                    2
 PHC                                                          0

SELECT CARRIER.CARRIERID, COUNT(PLAN.CARRIERID)
FROM CARRIER
LEFT OUTER JOIN PLAN
  ON CARRIER.CARRIERID = PLAN.CARRIERID
LEFT OUTER JOIN MEMBER
  ON PLAN.PLANID = MEMBER.PLANID
GROUP BY CARRIER.CARRIERID
ORDER BY CARRIER.CARRIERID;

導致

CARR                   COUNT(PLAN.CARRIERID)
 ---- ---------------------------------------
 ANTH                                      17
 BCBS                                      35
 DLT                                        7
 MM                                         8
 NWD                                        2
 PHC                                        0

我怎樣才能將這些組合起來讓所有的行彼此相鄰?

我想你只想要解析函數:

SELECT c.CARRIERID, p.PLANID, p.PLNDESCRIPTION,
       COUNT(m.PLANID) AS MBRCNT,
       SUM(COUNT(m.PLANID)) OVER (PARTITION BY c.CARRIERID) as CNT_2
FROM CARRIER c LEFT JOIN
     PLAN p
     ON c.CARRIERID = p.CARRIERID LEFT JOIN
     MEMBER m
     ON p.PLANID = m.PLANID
GROUP BY c.CARRIERID, p.PLANID, p.PLNDESCRIPTION
ORDER BY c.CARRIERID;

一種選擇是將它們full outer join在一起

with firstCount as (
    SELECT CARRIER.CARRIERID, PLAN.PLANID, PLNDESCRIPTION,
      COUNT(MEMBER.PLANID) AS MBRCNT
    FROM CARRIER
    LEFT OUTER JOIN PLAN
       ON CARRIER.CARRIERID = PLAN.CARRIERID
    LEFT OUTER JOIN MEMBER
       ON PLAN.PLANID = MEMBER.PLANID
    GROUP BY CARRIER.CARRIERID, PLAN.PLANID, PLNDESCRIPTION
    ORDER BY CARRIER.CARRIERID
)
secondCount as (
    SELECT CARRIER.CARRIERID, COUNT(PLAN.CARRIERID) as count
    FROM CARRIER
    LEFT OUTER JOIN PLAN
      ON CARRIER.CARRIERID = PLAN.CARRIERID
    LEFT OUTER JOIN MEMBER
      ON PLAN.PLANID = MEMBER.PLANID
    GROUP BY CARRIER.CARRIERID
    ORDER BY CARRIER.CARRIERID
)
select coalesce(firstCount.carrierId, secondCount.carrierId) as carrierId,
    firstCount.PLANID, 
    firstCount.PLNDESCRIPTION, 
    firstCount.MBRCNT,
    secondCount.Count
from firstCount 
full outer join secondCount on firstCount.CarrierId = secondCount.CarrierId

暫無
暫無

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

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