如何计算MySQL查询中的多个列

时间:2014-03-05 10:14:26

标签: mysql count

我有两个用于在我的网站中保存用户查询的表。一个用于Tickets,另一个用于Ticket Replies。我想要的是计算总票数+总回复数+不同状态的总票数。我可以成功计算总票数和总回复数,但我在计算机票状态时遇到问题。

问题: 当我使用以下查询时,它显示总的新票证和打开票证,但由于查询是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关闭。

更新: 我不想按状态对我的查询进行分组,因为它会将我的总票数分配给状态。

有任何帮助吗?感谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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