2013-10-30 74 views
0

我想爲某些不同類型的工作獲得某個表的合計值。我可以將這3個查詢合併爲一個查詢嗎?不同條件下的總價值

SELECT 
    COUNT(*) AS totaljobs, 
    SUM(filesize) AS totalfilesize 
FROM Job 

SELECT 
    COUNT(*) AS assignedjobs, 
    SUM(filesize) AS assignedjobs 
FROM Job 
JOIN Assignment ON Assignment.job_id = Job.id 

SELECT 
    COUNT(*) AS unassignedjobs, 
    SUM(filesize) AS unassignedjobs 
FROM Job 
LEFT JOIN Assignment ON Assignment.job_id = Job.id 
WHERE Assignment.job_id IS NULL 

查詢的行爲與您預期的相同,例如, totaljobs = assignedjobs + unassignedjobs。我覺得有一種方法可以在一個查詢中更高效地完成它,但我不知道如何。

+0

是否'Assignment.job_id'包含唯一的值?如果沒有,第一個查詢的結果不能是其他兩個結果的總和。 –

回答

0

試試這個

SELECT 
    SUM(case when Assignment.job_id IS NOT NULL then 1 else 0 end) AS assignedjobs, 
    SUM(case when Assignment.job_id IS NULL then 1 else 0 end) AS unassignedjobs, 
    COUNT(*) as totaljobs 
FROM Job 
LEFT JOIN Assignment ON Assignment.job_id = Job.id