2017-08-04 95 views
-1

在我修表,我想計算每種狀態的汽車(1,2,3和4):返回零與A組數查詢BY

Status 1: 5 
Status 2: 0 
Status 3: 6 
Status 4: 3 

,因爲它表明,在狀態沒有汽車2,所以,我做了相同的查詢4次與「WHEN狀態=='n'在每個狀態計數,並且工作正常。

現在我想只在一個查詢中,但在我的查詢:

select status,count(car_id)from repairs GROUP BY status。

告訴我這一點:

Status 1: 5 
Status 3: 6 
Status 4: 3 
+0

是'status'和'repairs'存儲在不同的表? –

+0

@DarshanMehta我只有一個包含car_id和包含int數字1-2-3或4的狀態行的修復表。 –

+0

您確定您的表中有狀態2。 –

回答

1

你將需要一個源,可能是一個表,其中包含要在報表中顯示的每個狀態。一種方式是「日曆表」方法,您可以將包含每種狀態的表格加入到當前查詢中,例如

SELECT 
    t1.status, 
    COALESCE(t2.car_cnt, 0) AS car_cnt 
FROM 
(
    SELECT 1 AS status UNION ALL -- replace this ad-hoc subquery with 
    SELECT 2 UNION ALL    -- an actual "calendar" table of statuses 
    SELECT 3 UNION ALL    -- or if you already have such a table, use that 
    SELECT 4 
) t1 
LEFT JOIN 
(
    SELECT status, COUNT(car_id) AS car_cnt 
    FROM repairs 
    GROUP BY car_id 
) t2 
    ON t1.status = t2.status 
+0

鑑於這個問題也被標記爲'PHP',我認爲這是一個不太合適的解決方案 – Strawberry

+1

@Strawberry我不同意你。沒有必要的數據來回答業務查詢與應用程序語言無關。除非你打算從PHP處理這個問題,我認爲這不是一個好主意。 –

0

試試這個:

SELECT status, count(car_id) 
FROM repairs GROUP BY car_id 
UNION 
SELECT status, 0 
FROM repairs WHERE status NOT IN 
(SELECT status FROM repairs GROUP BY car_id);