我有描述和创建日期的合格风险,谁附加到风险子类别,最后的风险属于风险类别,每个风险都有一个名称,如' 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
正如您所看到的,返回的数字是每个月的总数,但我的目标是获得每个不同风险的总数。 你能帮助我吗 。感谢
答案 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);
我不知道JOIN
和risk
之间的risk_category
条件是什么。
答案 1 :(得分:0)
然后尝试使用distinct
keuword与count()
代替count(distinct risk.id) as number
而不是