SQLite计数摘要查询

时间:2011-07-21 14:17:19

标签: sqlite count summary

我正在尝试查询总结每周员工的工作情况。例如,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;

以下是一个示例结果:

John Doe1 10 10 10 10 10 10

John Doe2 2 2 2 2 2 2

John Doe3 25 24 24 24 24 24

John Doe4 2 2 2 2 2 2

John Doe5 12 10 10 10 10 10

John Doe6 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;

2 个答案:

答案 0 :(得分:3)

你可能想要像这样使用COUNT

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

答案 1 :(得分:1)

在我看来,你不能在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;