2014-03-05 55 views
0

我有兩個表用於在我的網站中保存用戶查詢。一個是門票,另一個是門票回覆。我想要的是統計總票數+總回覆數+具有不同狀態的總票數。我可以成功計算總票數和總回覆數,但我在計算票狀態方面存在問題。如何計算MySQL查詢中的多個列

問題: 當我使用下面的查詢時,它顯示全部新的和打開的票證,但由於查詢是JOIN查詢,它顯示所有行的總狀態(這意味着它顯示所有答覆的狀態總和,而不是所有門票)。

SELECT COUNT(tr.ticketid) totalReplies, 
    COUNT(DISTINCT(t.ticketid)) totalTickets, 
     SUM(CASE WHEN t.status='Open' THEN 1 END) totalOpen, 
     SUM(CASE WHEN t.status='Close' THEN 1 END) totalClose 
FROM `tbl_ticket` t 
INNER JOIN `tbl_ticket_reply` tr ON tr.ticketid = t.ticketid 

希望我明確自己。我會用一個例子來解釋它。假設我們有以下總記錄:

total tickets: 10 
total replies: 20 

比方說,半票打開,一半關閉。然後它應該顯示5打開,5關閉。相反,它提供了10個開放和10個關閉。

更新: 我不想按狀態分組我的查詢,因爲它會將我的總票數分配給狀態。

任何幫助?謝謝

回答

1

此代碼可能工作爲您的數據

SELECT 
COUNT(t.ticketid) AS totaltickets, 
SUM(CASE WHEN t.status='Open' THEN 1 END) AS totalopen, 
SUM(CASE WHEN t.status='Close' THEN 1 END) AS totalclose 
,(
    SELECT COUNT(*) FROM tbl_ticket t 
    LEFT JOIN tbl_ticket_reply tr ON t.ticketid=tr.ticketid 
) AS total_replies 
FROM tbl_ticket t 
1

在您的查詢中使用GROUP BY status

你需要的東西,如:

select count(tickets) tkt_cnt, count(replies) rep_cnt from mytable 
group by status 

您的查詢,以下變化應該是工作。

SELECT 
    COUNT(tr.ticketid) totalReplies, 
    COUNT(DISTINCT(t.ticketid)) totalTickets, 
    SUM(CASE WHEN t.status='Open' THEN 1 ELSE 0 END) totalOpen, 
    SUM(CASE WHEN t.status='Close' THEN 1 ELSE 0 END) totalClose 
FROM `tbl_ticket` t 
INNER JOIN `tbl_ticket_reply` tr ON tr.ticketid = t.ticketid 
GROUP BY t.status 
+0

嗨。謝謝。但是,我不想按狀態分組,因爲它會顯示總計票和總回覆的2行。我不希望我的票和回覆在狀態之間分配。 –