每个日期/时间具有多个组的 MySQL 查询计数
Posted
技术标签:
【中文标题】每个日期/时间具有多个组的 MySQL 查询计数【英文标题】:MySQL Query count with multiple group per date/time 【发布时间】:2015-04-30 12:51:33 【问题描述】:mysql
表中有以下数据:
+-------------------------------------+-----------------+
| DATE | SipResponseCode |
+-------------------------------------+-----------------+
| 20 Feb | 200 |
| 20 Feb | 500 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 487 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 500 |
| 20 Feb | 500 |
| 20 Feb | 487 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 500 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 200 |
| 20 Feb | 500 |
| 21 Feb | 200 |
| 21 Feb | 487 |
| 21 Feb | 200 |
| 21 Feb | 487 |
| 21 Feb | 487 |
| 21 Feb | 487 |
| 21 Feb | 487 |
| 21 Feb | 200 |
| 21 Feb | 200 |
| 21 Feb | 487 |
| 21 Feb | 487 |
| 21 Feb | 500 |
我想编写 SQL 查询,这样它就可以给我每天的 SipResponseCode 计数 200
、487
、500
+-------------------------------------+------------+-----------+--------+
| DATE | 200 | 487 | 500 |
+-------------------------------------+------------+--------------------+
| 20 Feb | 14 | 2 | 5 |
| 21 Feb | 4 | 7 | 1 |
我很累,但无法得到正确的结果。
【问题讨论】:
@Strawberry 我不是SQL expert
伙计,加油!来这里寻求帮助..我需要专家才能提出问题吗?
值 200、487 和 500 是否一致?这些价值观是你提前知道的吗?
@McAdam331 是的,这些值是固定的,还有更多的 SipResponsecode 502
,403
,408
等。但是一旦我知道如何将它们组合在一起,我将设法调整它们
@Strawberry 我不认为这种态度对 *** 有帮助。这应该是人们在需要时寻求帮助的地方,而不必担心因不知道而被贬低。
@Strawberry 我擅长 Linux 系统管理员,但不是开发人员(SQL 编写者),只是被困在这里,所以认为你们会提供帮助,但看起来你 down
已经投票了......非常失望:(
【参考方案1】:
标准答案大致如下:
SELECT date
, sipresponsecode
, COUNT(sipresponsecode) x
FROM my_table
GROUP
BY date
, sipresponsecode;
【讨论】:
【参考方案2】:以下查询将为您提供结果,不是您想要的,而是以一种简单的方式稍后用您的语言(php、C# 等)解析它。
SELECT DATE, GROUP_CONCAT(CAST(TEST AS CHAR(10000) CHARACTER SET utf8) SEPARATOR ",") AS myCol
FROM
(
SELECT DATE, CONCAT(SipResponseCode, "^", COUNT(*)) AS TEST
FROM table1
GROUP BY DATE, SipResponseCode
) a
GROUP BY DATE
【讨论】:
【参考方案3】:如果值 200、487 和 500 是您在编写查询时知道的常量值,则可以在 select 子句的 case 语句中使用这些值。
比 case 语句更易读的方法是使用带有条件的 SUM() 函数,它本质上将计算满足该条件的行数。试试这个:
SELECT dateColumn,
SUM(SisResponseCode = 200) AS '200',
SUM(SisResponseCode = 487) AS '487',
SUM(SisResponseCode = 500) AS '500'
FROM myTable
GROUP BY dateColumn;
【讨论】:
以上是关于每个日期/时间具有多个组的 MySQL 查询计数的主要内容,如果未能解决你的问题,请参考以下文章