讓我們考慮下表-
ID Score 1 95 2 100 3 88 4 100 5 73
我是一個十足的 SQL 菜鳥,但如何傳回包含 ID 2 和 4 的分數? 因此它應該回傳 100,因為它同時出現在 ID 2 和 4 中
SELECT score FROM t WHERE id in (2, 4) HAVING COUNT(*) = 2 /* replace this with the number of IDs */
這將選擇 ID 為 2 和 4 的行。然後,HAVING 子句確保我們找到了這兩行;如果其中一個缺失,計數將小於 2。
HAVING
這假設 id 是唯一一列。
id
這是「集合內集合」查詢的範例。我建議使用 having 子句進行聚合,因為它是最靈活的方法。
having
select score from t group by score having sum(id = 2) > 0 and -- has id = 2 sum(id = 4) > 0 -- has id = 4
這所做的是按分數聚合。然後 having 子句的第一部分 (sum(id = 2)) 計算每個分數有多少個「2」。第二個是數「4」的個數。僅傳回“2”和“4”的分數。
sum(id = 2)
這將選擇 ID 為 2 和 4 的行。然後,
HAVING
子句確保我們找到了這兩行;如果其中一個缺失,計數將小於 2。這假設
id
是唯一一列。這是「集合內集合」查詢的範例。我建議使用
having
子句進行聚合,因為它是最靈活的方法。這所做的是按分數聚合。然後
having
子句的第一部分 (sum(id = 2)
) 計算每個分數有多少個「2」。第二個是數「4」的個數。僅傳回“2”和“4”的分數。