簡體   English   中英

帶COUNT的子查詢(mysql)

[英]Subquery with COUNT (mysql)

我有下表:

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";

我很確定它需要是子查詢,但在語法上掙扎!

您可以將SUM與條件一起使用,這將導致布爾值,並根據條件為您提供計數

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM