2011-12-05 20 views
1
SELECT COUNT(np.id) FROM new_people np 
LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
LEFT JOIN roster r ON np.id = r.people_id 
WHERE np.company_id =55923 AND ur.rid =8 AND np.active =1 AND r.roster_id IS NULL 

UNION 

SELECT COUNT(people_id) FROM roster 
WHERE lu =1 AND STATUS <> 'complete' AND company_id =55923 

new_people有15條記錄符合選擇條件。 roster有12.如果我按原樣運行此查詢,它將返回兩行,一行包含「15」,另一行包含「12」。有沒有什麼方法可以編寫它,以便返回單個值「27」?如何使用count()從多個表(聯合)中返回帶有總計的單個記錄?

回答

2
select sum(tot) as total from (
SELECT COUNT(np.id) as tot FROM new_people np 
LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
LEFT JOIN roster r ON np.id = r.people_id 
WHERE np.company_id =55923 AND ur.rid =8 AND np.active =1 AND r.roster_id IS NULL 

UNION ALL 

SELECT COUNT(people_id) FROM roster 
WHERE lu =1 AND STATUS <> 'complete' AND company_id =55923) as t 
+0

+1。看起來只有3秒鐘! – Nonym

3

最簡單的辦法:

SELECT SUM(T1.COL1) FROM (
    SELECT COUNT(np.id) AS COL1 FROM new_people np 
    LEFT JOIN institute.users_roles ur ON np.institute_uid = ur.uid 
    LEFT JOIN roster r ON np.id = r.people_id 
    WHERE np.company_id =55923 AND ur.rid =8 AND np.active =1 AND r.roster_id IS NULL 

    UNION ALL 
    -- Added ALL to prevent DISTINCT from being put into effectivity by the UNION 
    -- ; thanks for the reminder, @nickrulez 

    SELECT COUNT(people_id) AS COL1 FROM roster 
    WHERE lu =1 AND STATUS <> 'complete' AND company_id =55923 
) T1 

除非有某種方式..加入..第二SELECT聲明與第一..目前,我怎麼沒看到,雖然..但是,如果有..請告訴我們..

+0

+ 1.比我快。 ;) –

+0

請注意,如果兩個查詢返回相同數量的記錄,則不使用UNION ALL,總和將會錯誤(只是一半);) –

+0

垃圾。你是對的。錯過了那一個。 Lemme fiiiixxx ... – Nonym

相關問題