【问题标题】:Count() return total instead distinct countCount() 返回总数而不是不同的计数
【发布时间】:2017-03-16 10:42:16
【问题描述】:

我有带有描述和创建日期的合格风险,它们附加到风险的子类别中,最后一个附加到风险类别中,每个风险都有一个类似“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

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

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需的结果。查询有很多错误。

标签: mysql sql count


【解决方案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 之间是什么。

【讨论】:

  • 感谢您的回答,最初我有与您相同的要求,但最后一个不起作用,因为我需要计算所有 risk_category 的计数,即使是那些不存在风险的人一个月
  • @MK-rou 。 . .你只需要一个外连接。
【解决方案2】:

然后尝试将distinct keuword 与count() 一起使用,例如count(distinct risk.id) as number

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2019-07-02
    相关资源
    最近更新 更多