我非常深入研究連接和子查詢的組合,這些組合最終得到的查詢結果如下所示:我根本沒有處理彈珠,但我想解釋這一點的一種方法是想象一個帶有藍色和紅色大理石。袋子 1 包含藍色和紅色,(因此結果為真和假),袋子 2 也相同。Bag 3 只有藍色彈珠,沒有紅色彈珠,所以只有一個條目是真的。而 bag 4 只包含紅色的,所以值為 false。
我想要做的是選擇所有沒有“真”值的 ID。因此,在下面的這種情況下,ID 1,2 和 3 都有一個值為“true”的行,而 ID 4 和 5 僅包含 false(s)而沒有 true。所以我希望查詢回傳 ID 4 和 5。這些結果按它們的 ID 分組,所以我一直在嘗試不同的 HAVING 子句,試圖計算其中 COUNT of trues = 0 的特定想法,但沒有任何成功。
輸入:這個表(這是一個更大的查詢的結果)
| ID | hasBlueMarbles |
| -- | ------- |
| 1 | true |
| 1 | false |
| 2 | true |
| 2 | false |
| 3 | true |
| 4 | false |
| 5 | false |
| 5 | false |
預期輸出:只有“false”值而不是“true”值記錄的 ID
| ID |
| -- |
| 4 |
| 5 |
首先,這可能是一個非常奇怪的資料集,這可能意味著我在最初的查詢中做錯了一些讓我來到這里的問題。如果需要,我可以添加主查詢,但脫離背景關系可能會有點混亂。謝謝!
uj5u.com熱心網友回復:
1. BOOL_OR()
您正在尋找的功能是BOOL_OR().
這里解釋為:
如果集合中的任何值為真,則 BOOL_OR 函式回傳真 (t)。如果集合中沒有值為 true,則函式回傳 false (f)。
開始:
SELECT ID,
BOOL_OR(hasBlueMarbles) AS HasBlueMarbles
FROM table
GROUP BY ID
HAVING BOOL_OR(hasBlueMarbles) = FALSE
2. MAX()
或者您可以簡單地使用MAX()函式來獲取最大的布林值并過濾掉結果。
SELECT ID,
MAX(hasBlueMarbles) AS HasBlueMarbles
FROM table
GROUP BY ID
HAVING MAX(hasBlueMarbles) = 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/388640.html
標籤:mysql PostgreSQL的
上一篇:使用PHP處理多對多資料庫關系并選擇/插入多個復選框值MYSQL
下一篇:SELECTMySQLwith02countsinthesametablewithWHEREandGROUPBYinthesameQuery
