目前,我有一個名為 mytable 的資料庫表,它看起來像這樣
| ID | 開始時間 | 結果 |
|---|---|---|
| 100 | 2022-11-17 06:19:00 | 經過 |
| 101 | 2022-11-17 07:19:00 | 失敗 |
| 102 | 2022-11-17 08:44:00 | 經過 |
| 103 | 2022-11-17 16:19:00 | 失敗 |
| 104 | 2022-11-16 06:11:00 | 經過 |
| 105 | 2022-11-16 06:11:00 | 失敗 |
| 106 | 2022-11-16 06:12:00 | 經過 |
| 107 | 2022-11-16 12:11:00 | 經過 |
這需要轉化為
| 日期 | 經過 | 失敗 |
|---|---|---|
| 2022-11-17 | 2個 | 2個 |
| 2022-11-16 | 3個 | 1個 |
我可以為此使用什么查詢?
我努力了
SELECT result, DATE(startTime), COUNT(result)
FROM mytable
GROUP BY DATE(startTime), result;
但這不能正常作業
uj5u.com熱心網友回復:
您可以僅按日期 ( ) 使用條件聚合DATE(startTime)分組,例如
SELECT DATE(startTime) AS `date`,
SUM(result = 'pass') AS `pass`,
SUM(result = 'fail') AS `fail`
FROM mytable
GROUP BY 1
ORDER BY 1 DESC -- if needed
uj5u.com熱心網友回復:
使用GROUP BY和Case When
select DATE(startTime) AS date,
sum(case when result='pass' then 1 else 0 end) as pass,
sum(case when result='fail' then 1 else 0 end) as fail
from mytable
group by startTime;
uj5u.com熱心網友回復:
讓我們先說:如果您 100% 確定您始終準確地擁有“通過”和“失敗”這兩個值,并且具有這些硬編碼條件的查詢將始終產生正確的結果,那么只需使用 Barbaros 顯示的查詢。在這種情況下不會有更好的方法。那么你可以忽略我剩下的答案。
但是讓我們跳出框框思考:這樣的查詢通常是有風險的,并且因為人們沒有真正考慮過可能性而被使用。硬編碼條件有一個很大的缺點,就是它們會忽略其他選項。假設您的表中還有諸如“未知”或“確定”或“確定”之類的條目。您沒有注意到這一點,現在您丟失了此資訊并且您的查詢產生了不正確的結果。
因此,如果可能發生這種情況,請不要使用硬編碼條件。
在這種情況下,讓我們只計算結果并按結果分組:
SELECT DATE(startTime) AS `date`,
result,
COUNT(result) AS resultQty
FROM mytable
GROUP BY DATE(startTime), result
ORDER BY DATE(startTime) DESC;
這將確保您獲得表格中顯示的每個結果的資訊。如果此結果沒有預期的形式,也可以使用子查詢在 SQL 中進行調整。但我認為這最好由您的應用程式來完成。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/535618.html
