摘要查询返回重复值MySQL

时间:2018-02-28 16:24:12

标签: mysql sql group-by count aggregate

我必须为我的系统上要求的门票报告。

从工作站调用票证,该工作站与许多区域相关。

  SELECT
   DATE(q.created_at)   AS DATE,
   HOUR(q.created_at)   AS HOUR,
   ar.name              AS area,
   w.name               AS workstation,
   COUNT(DISTINCT q.id) AS count
  FROM qms_queue q
  JOIN qms_workstations w ON q.workstation_id = w.id
  JOIN qms_area_workstation aw ON aw.workstation_id = w.id
  JOIN qms_areas ar ON aw.area_id = ar.id
  WHERE q.created_at
      BETWEEN '2018-02-26 00:00:00'
      AND '2018-02-28 23:59:59'
      AND customer_id = 1
  GROUP BY DATE(q.created_at), w.id, HOUR(q.created_at)
  ORDER BY DATE(q.created_at), HOUR(q.created_at)

执行该查询,我得到了门票的总数。

  SELECT
   DATE(q.created_at)   AS DATE,
   HOUR(q.created_at)   AS HOUR,
   ar.name              AS area,
   w.name               AS workstation,
   COUNT(DISTINCT q.id) AS count
  FROM qms_queue q
  JOIN qms_workstations w ON q.workstation_id = w.id
  JOIN qms_area_workstation aw ON aw.workstation_id = w.id
  JOIN qms_areas ar ON aw.area_id = ar.id
  WHERE q.created_at
      BETWEEN '2018-02-26 00:00:00'
      AND '2018-02-28 23:59:59'
      AND customer_id = 1
  GROUP BY DATE(q.created_at), w.id, HOUR(q.created_at), ar.id
  ORDER BY DATE(q.created_at), HOUR(q.created_at)

但是,执行该查询会获得每个区域的绝对总数。

我无法找出计算每个区域的部分计数的方法。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

如果没有看到实际数据,请考虑简单地运行不同的聚合,一个位于 Area 级别,另一个位于 Workstation 级别,而不是两者。如果需要,可以通过 Date Hour 连接两者作为派生表子查询:

区域级别

SELECT
    DATE(q.created_at)   AS `DATE`,
    HOUR(q.created_at)   AS `HOUR`,
    ar.name              AS `area`,
    COUNT(DISTINCT q.id) AS `area_count`
...
GROUP BY DATE(q.created_at), HOUR(q.created_at), ar.name
ORDER BY DATE(q.created_at), HOUR(q.created_at)

工作站级别

SELECT
   DATE(q.created_at)   AS `DATE`,
   HOUR(q.created_at)   AS `HOUR`,
   w.name               AS `workstation`,
   COUNT(DISTINCT q.id) AS `ws_count`
...
GROUP BY DATE(q.created_at), HOUR(q.created_at), w.name
ORDER BY DATE(q.created_at), HOUR(q.created_at)

答案 1 :(得分:-1)

您好我没有您的数据设置,但尝试分析功能

COUNT(q.id) OVER (PARTITION BY  ar.name)

检查这是否可以为每个区域提供计数。