如果某些條件不正確,我會試圖讓這個 SQL 查詢回傳 0 的計數。示例:我有 2 個表:
表一:
| 時間戳 | 主持人 | 當前狀態 |
|---|---|---|
| 1638290800 | 服務器A | 0 |
| 1638290800 | 服務器B | 0 |
| 1638290770 | 服務器A | 0 |
| 1638290770 | 服務器B | 2 |
表B
| 主持人 | 地點 |
|---|---|
| 服務器A | 巴塞羅那 |
| 服務器B | 紐約 |
| 服務器C | 巴塞羅那 |
| 服務器D | 紐約 |
現在我的 SQL 查詢看起來像:
SELECT A.timestamp, Count(*)
FROM tableB as B
LEFT JOIN tableA A ON A.host = B.host
WHERE A.current_state != 0 AND B.location= 'Barcelona'
GROUP BY A.timestamp
如何獲得按時間戳分組的當前狀態 != 0 的主機計數?
我的查詢結果如下:
| 時間戳 | 數數 |
|---|---|
| 1638290770 | 1 |
我想要類似的東西:
| 時間戳 | 數數 |
|---|---|
| 1638290800 | 0 |
| 1638290770 | 1 |
uj5u.com熱心網友回復:
從您非常接近的嘗試中可以改變一些事情:
- 將您的 where 條件
barcelona移到ON您對該表的連接中。否則你LEFT OUTER JOIN會成為一個隱含的INNER JOIN - 也不是
Count(*),只需獲取該b.host列的 NULL 不會計入計數的計數。 - 最后交換加入這些表的順序。您希望所有值都來自
TableA并且僅那些TableB滿足您的條件的值。
SELECT A.timestamp, Count(b.host)
FROM tableA as A
LEFT JOIN tableB as B ON A.host = B.host AND B.location= 'Barcelona'
WHERE A.current_state != 0
GROUP BY A.timestamp
uj5u.com熱心網友回復:
如果您想為表 A 中的每個時間戳獲取結果行,無論表 B 中是否有匹配的連接條目,那么表 A 需要在您的左側LEFT JOIN(或使用 a RIGHT JOIN,不太常見):
SELECT A.timestamp, Count(B.*)
FROM tableA as A
LEFT JOIN tableB B
ON A.host = B.host AND A.current_state != 0 AND B.location != 'Barcelona'
GROUP BY A.timestamp
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370186.html
標籤:sql 数据库 PostgreSQL的
