我有两个用于在我的网站中保存用户查询的表。一个用于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关闭。
更新: 我不想按状态对我的查询进行分组,因为它会将我的总票数分配给状态。
有任何帮助吗?感谢
答案 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