我现在有一张表,如下所示,
Column Type
time datetime
ticket int(20)
agentid int(20)
ExitStatus varchar(50)
Queue varchar(50)我想要编写一个查询,它将按周对此进行分解,为每个ExitStatus提供一列计数。到目前为止,我得到了这个,
SELECT ExitStatus,COUNT(ExitStatus) AS ExitStatusCount, DAY(time) AS TimePeriod
FROM `table`
GROUP BY TimePeriod, ExitStatus输出:
ExitStatus ExitStatusCount TimePeriod
NoAgentID 1 4
Success 3 4
NoAgentID 1 5
Success 5 5我想要更改它,使其以这种格式返回结果:
week | COUNT(NoAgentID) | COUNT(Success) | 理想情况下,我希望列是动态的,因为其他ExitStatus值也是可能的。
此信息将被格式化,并在页面上的表格中显示给最终用户。这可以在SQL中完成吗?还是应该在PHP中重新格式化?
发布于 2012-06-05 10:24:16
这是一种方法;您可以使用SUM()来计算某个特定条件为真的项数。最后,您只需按照正常的时间进行分组。
SELECT DAY(time) AS TimePeriod,
SUM('NoAgentID' = exitStatus) AS NoAgentID,
SUM('Success' = exitStatus) AS Success, ...
FROM `table`
GROUP BY TimePeriod输出:
4 1 3
5 1 5但是,这里的列不是动态的,这意味着您必须在进行过程中添加条件。
发布于 2012-06-05 10:24:49
SELECT week(time) AS week,
SUM(ExitStatus = 'NoAgentID') AS 'COUNT(NoAgentID)',
SUM(ExitStatus = 'Success') AS 'COUNT(Success)'
FROM `table`
GROUP BY week我正在猜测ExitStatus列是如何工作的。此外,有许多方法来解释“星期”,例如一年中的星期,月中的星期,或季度中的星期……您将需要将适当的函数放在那里。
https://stackoverflow.com/questions/10890719
复制相似问题