2011-07-21 80 views
1

我試圖得到一個查詢來總結每週員工的工作。例如,John Doe本週總共有12張門票,其中4張是休息/修復,4張是增強型,另外4張是未分類的。SQLite計數摘要查詢

這是我到目前爲止有:

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; 

下面是一個簡單的結果:

約翰DOE1 10 10 10 10 10 10

約翰DOE2 2 2 2 2 2 2

John Doe3 25 24 24 24 24 24

John Doe4 2 2 2 2 2 2

約翰Doe5 12 10 10 10 10 10

約翰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

您可能需要使用COUNT這樣

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

這工作!非常感謝! – Bigun

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; 
+0

我張貼的樣本結果。 我可以在GROUP BY子句中使用別名,因爲它正在工作。 你能給我一個後者的例子嗎? – Bigun

+0

好吧,我問,因爲它不適用於MySQL。我編輯了我的帖子。 – MatTheCat