【问题标题】:SQLite Count Summary QuerySQLite 计数汇总查询
【发布时间】:2011-07-21 14:17:19
【问题描述】:

我正在尝试获取一个查询来总结每个员工一周的工作。例如,John Doe 一周共制作了 12 张票,其中 4 张是 Break/Fixes,4 张是 Enhancement,另外 4 张未分类。

这是我目前所拥有的:

SELECT (users.first_name || ' ' || users.last_name) AS Name,
  COUNT(tickets.id) AS 'Number of Tickets Closed',
  COUNT(tickets.category = 'Maintenance') AS 'Maintenance Tickets',
  COUNT(tickets.category = 'After Hours') AS 'After Hours Tickets',
  COUNT(tickets.category = 'Break Fix') AS 'Break Fix Tickets',
  COUNT(tickets.category = 'Enhancement') AS 'Enhancement Tickets',
  COUNT(tickets.category = '') AS 'Non Categorized Tickets'
FROM tickets, users
ON tickets.assigned_to=users.id
WHERE (tickets.status = 'closed') AND
  (tickets.closed_at >= '2011-07-16 00:00:00') AND
  (tickets.closed_at <= '2011-07-22 23:59:59')
GROUP BY Name;

这是一个示例结果:

约翰·多伊1 10 10 10 10 10 10

约翰·多伊2 2 2 2 2 2 2

约翰·多伊3 25 24 24 24 24 24

约翰·多伊4 2 2 2 2 2 2

约翰·多伊5 12 10 10 10 10 10

约翰·多伊6 7 7 7 7 7 7

这个查询并没有像我预期的那样工作,因为所有列的总数都相同(关闭的票证总数,以下列似乎只包含分类的票证。)帮助?

编辑

只是想发布功能代码:

SELECT (users.first_name || ' ' || users.last_name) AS Name,
  COUNT(tickets.id) AS 'Number of Tickets Closed',
  COUNT(case tickets.category when 'Maintenance' then 1 else null end) AS 'Maintenance Tickets',
  COUNT(case tickets.category when 'After Hours' then 1 else null end) AS 'After Hours Tickets',
  COUNT(case tickets.category when 'Break Fix' then 1 else null end) AS 'Break Fix Tickets',
  COUNT(case tickets.category when 'Enhancement' then 1 else null end) AS 'Enhancement Tickets',
  COUNT(case tickets.category when '' then 1 else null end) AS 'Non Categorized Tickets'
FROM tickets, users
ON tickets.assigned_to=users.id
WHERE (tickets.status = 'closed') AND
  (tickets.closed_at >= '2011-07-16') AND
  (tickets.closed_at <= '2011-07-22')
GROUP BY Name;

【问题讨论】:

    标签: sqlite count summary


    【解决方案1】:

    你可能想像这样使用 COUNT

    ...
        COUNT(case tickets.category when 'Maintenance' then 1 else null end),
        COUNT(case tickets.category when 'After Hours' then 1 else null end),
    ...
    

    【讨论】:

    • 像魅力一样工作!谢谢。
    【解决方案2】:

    在我看来,您不能在 GROUP BY 子句中使用别名。您的用户没有可以用来区分他们的 ID 吗?

    如果要与条件进行比较,则必须使用 SUM 而不是 COUNT。

    SELECT (users.first_name || ' ' || users.last_name) AS Name,
      COUNT(tickets.id) AS 'Number of Tickets Closed',
      SUM(tickets.category = 'Maintenance') AS 'Maintenance Tickets',
      SUM(tickets.category = 'After Hours') AS 'After Hours Tickets',
      SUM(tickets.category = 'Break Fix') AS 'Break Fix Tickets',
      SUM(tickets.category = 'Enhancement') AS 'Enhancement Tickets',
      SUM(tickets.category = '') AS 'Non Categorized Tickets'
    FROM tickets, users
    ON tickets.assigned_to=users.id
    WHERE (tickets.status = 'closed') AND
      (tickets.closed_at >= '2011-07-16 00:00:00') AND
      (tickets.closed_at <= '2011-07-22 23:59:59')
    GROUP BY Name;
    

    【讨论】:

    • 我发布了一个示例结果。我可以在 GROUP BY 子句中使用别名,因为它正在工作。你能给我举个后者的例子吗?
    • 好的,我问了这个问题,因为它不适用于 MySQL。我已经编辑了我的帖子。
    猜你喜欢
    • 2019-11-07
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多