Count()返回total而不是count

时间:2017-03-16 10:42:17

标签: mysql sql count

我有描述和创建日期的合格风险,谁附加到风险子类别,最后的风险属于风险类别,每个风险都有一个名称,如' Risk_1' ,我的目标是按月计算风险数量,风险类别包括零。

我有这个要求:

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

正如您所看到的,返回的数字是每个月的总数,但我的目标是获得每个不同风险的总数。 你能帮助我吗 。感谢

2 个答案:

答案 0 :(得分: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);

我不知道JOINrisk之间的risk_category条件是什么。

答案 1 :(得分:0)

然后尝试使用distinct keuword与count()代替count(distinct risk.id) as number而不是