2017-03-16 160 views
0

我有合格的風險,描述和創建日期,誰附加到風險的子類別這最後一個附加到風險類別,每個風險有一個名稱,如'Risk_1',我的目標是按月計算風險的數量,風險類別包括零。Count()return total instead distinct count

我有這樣的要求:

SELECT DISTINCT risk_names.type as risk_name, MONTH(risk.creation_date) as month, count(risk.id) as number FROM risk As risk , risk_category 
    JOIN (
    SELECT risk_category.name as type 
    FROM 
     risk_category 
    ) as risk_names on risk_names.type = risk_category.name 
where risk.creation_date >= (NOW()-INTERVAL 3 MONTH) GROUP BY MONTH(risk.creation_date), risk_names.type; 

誰返回這個結果:

Risk_name   month number 
--------------------------------- 
Risk_1    1  10 ---> instead 8 
Risk_2    1  10 ---> instead 1 
Risk_3    1  10 ---> instead 1 
Risk_1    2  12 ...... 
Risk_2    2  12 
Risk_3    2  12 
Risk_1    12  4 
Risk_2    12  4 
Risk_3    12  4 

,你可以看到返回的數字是總每月,但我的目的是讓總的每個不同的風險。 你能幫助我嗎?感謝

+1

編輯您的問題,並提供樣本數據和期望的結果。該查詢有很多錯誤。 –

回答

0

然後嘗試使用distinct keuword與count()count(distinct risk.id) as number代替

1

逗號在FROM正在做一個CROSS JOIN。笛卡爾產品是不必要的,並拋出所有計數。

我懷疑你想是這樣的:

SELECT rc.type as risk_name, MONTH(r.creation_date) as month, 
     count(r.id) as number 
FROM risk_category rc LEFT JOIN 
    risk r 
    ON r.?? = rc.?? 
where risk.creation_date >= (NOW()-INTERVAL 3 MONTH) 
GROUP BY rc.type, MONTH(r.creation_date); 

我不知道JOIN標準是什麼riskrisk_category之間。

+0

謝謝你的回答,最初我有和你一樣的要求,但這最後一個不起作用,因爲我需要所有risk_category的計數,即使那些在一個月內不存在風險的人也是如此 –

+0

@ MK-rou 。 。 。你只需要一個外連接。 –