2017-03-16 90 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 。 。 。你只需要一个外连接。 –