SQLite Count Query Query - PullRequest
       30

SQLite Count Query Query

1 голос
/ 21 июля 2011

Я пытаюсь получить запрос для подведения итогов работы каждого сотрудника за неделю. Например, Джон Доу сделал за неделю 12 билетов, 4 из которых были «Перерыв / Исправления», 4 - «Улучшение», а еще 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

Этот запрос не совсем работает, как я ожидал, поскольку все столбцы имеют одинаковое общее количество (общее количество закрытых заявок, кажется, что следующие столбцы содержат только классифицированные.) Справка?

EDIT

Просто хотел выложить функциональный код:

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 ]

3 голосов
/ 21 июля 2011

вы можете использовать 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 голос
/ 21 июля 2011

Мне кажется, вы не можете использовать псевдоним в предложении GROUP BY.Разве у ваших пользователей нет идентификатора, который вы могли бы использовать для их дифференциации?

И вы должны использовать СУММУ вместо СЧЕТА, если хотите считать по сравнению с условием.

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...