【问题标题】:How to count multiple columns in a MySQL query如何计算 MySQL 查询中的多列
【发布时间】:2014-03-05 10:14:25
【问题描述】:

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

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

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

有什么帮助吗?谢谢

【问题讨论】:

    标签: mysql count


    【解决方案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 
    

    【讨论】:

      【解决方案2】:

      在您的查询中使用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
      

      【讨论】:

      • 嗨。谢谢。但是,我不想按状态分组,因为它会显示 2 行的总票数和总回复数。我不希望我的票证和回复在不同状态之间分配。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2021-08-05
      • 2012-01-05
      • 2019-07-08
      相关资源
      最近更新 更多