带计数的子查询(mysql)
我有下表:带计数的子查询(mysql),mysql,sql,subquery,Mysql,Sql,Subquery,我有下表: id | user | createdAt | pstatus ------------------------------------------------------- 287 | Foo | 2013-08-01 17:19:24 | PLAYING 286 | Foo | 2013-08-01 17:18:24 | IDLE 285 | Foo | 2013-08-01 17:17:24 | PLAYING 284 |
id | user | createdAt | pstatus
-------------------------------------------------------
287 | Foo | 2013-08-01 17:19:24 | PLAYING
286 | Foo | 2013-08-01 17:18:24 | IDLE
285 | Foo | 2013-08-01 17:17:24 | PLAYING
284 | Foo | 2013-08-01 17:16:24 | BUFFERING
283 | Foo | 2013-08-01 17:15:24 | STOPPED
如何查询此表以生成以下结果?基本上,我需要获得每个用户每天不同pstatus值的总数
User | logdate | playCount | idleCount | bufferCount | StopCount
-------------------------------------------------------------------
Foo | 2013-08-01 | 48| 62 | 0 | 4
Foo | 2013-08-02 | 25| 22 | 0 | 0
Bar | 2013-08-02 | 22| 32 | 5 | 4
Bar | 2013-08-03 | 44| 11 | 1 | 0
Foo | 2013-08-03 | 32| 03 | 0 | 0
我知道我可以使用DATE(createdAt)来获取每天的日期,而不是时间戳,但我很难将以下内容合并到一个查询中:
COUNT(pstatus) AS playCount WHERE pstatus = "PLAYING";
COUNT(pstatus) AS idleCount WHERE pstatus = "IDLE";
COUNT(pstatus) AS bufferCount WHERE pstatus = "BUFFERING";
COUNT(pstatus) AS StopCount WHERE pstatus = "STOPPED";
我很确定它需要是子查询,但是语法很难理解 您可以使用带有条件的
求和
,这将产生一个布尔值,并根据条件给出计数
SELECT
DATE(createdAt) logdate,
SUM(pstatus = "PLAYING") playCount
,SUM(pstatus = "IDLE") idleCount
,SUM(pstatus = "BUFFERING") bufferCount
,SUM(pstatus = "STOPPED") StopCount
FROM `table`
GROUP BY `User`,DATE(`createdAt`)
试试这个:
SELECT
SUM(CASE
WHEN pstatus = "PLAYING" THEN 1
ELSE 0
END) AS sumPLAYING,
SUM(CASE
WHEN pstatus = "IDLE" THEN 1
ELSE 0
END) AS sumIDLE,
SUM(CASE
WHEN pstatus = "BUFFERING" THEN 1
ELSE 0
END) AS sumBUFFERING,
SUM(CASE
WHEN pstatus = "STOPPED" THEN 1
ELSE 0
END) AS sumSTOPPED
FROM YOUR_TABLE
pstatus在第二台table@JustinMitchell我看不到OP的问题完美的第二张表——这正是我想要的。供参考的最终查询如下所示:按用户选择用户,日期(createdAt)作为createdAtDate,SUM(pstatus=“PLAYING”)作为playCount,SUM(pstatus=“IDLE”)作为idleCount,SUM(pstatus=“BUFFERING”)作为bufferCount,SUM(pstatus=“STOPPED”)作为pings组中的StopCount,按用户ASC选择日期(createdAt)顺序,CreatedAtDate ASC