我就是想不通這個。我已經嘗試了幾個小時。我有一張這樣的桌子……
| ID | 樣本 |
|---|---|
| 1 | 一種 |
| 1 | 乙 |
| 1 | C |
| 1 | D |
| 2 | 一種 |
| 2 | 乙 |
| 3 | 一種 |
| 4 | 一種 |
| 4 | 乙 |
| 4 | C |
| 5 | 乙 |
我有興趣獲取與給定 ID 的“A”、“B”和“C”匹配的所有樣本。ID 必須包含所有 3 種樣品型別。表中有更多樣本型別,但我只對 A、B 和 C 感興趣。
這是我想要的輸出......
| ID | 樣本 |
|---|---|
| 1 | 一種 |
| 1 | 乙 |
| 1 | C |
| 4 | 一種 |
| 4 | 乙 |
| 4 | C |
如果我使用這個:
WHERE sample in ('A', 'B', 'C')
我得到這個結果:
| ID | 樣本 |
|---|---|
| 1 | 一種 |
| 1 | 乙 |
| 1 | C |
| 1 | D |
| 2 | 一種 |
| 2 | 乙 |
| 3 | 一種 |
| 4 | 一種 |
| 4 | 乙 |
| 4 | C |
| 5 | 乙 |
關于如何獲得所需輸出的任何想法?
uj5u.com熱心網友回復:
一種符合 ANSI 的方法是使用不同的計數進行聚合
select id, sample
from t
where sample in ('A','B','C')
and id in (
select id from t
where sample in ('A','B','C')
group by id
having Count(distinct sample)=3
);
uj5u.com熱心網友回復:
WHERE sample in (‘A’, ‘B’, ‘C’)
應消除任何其他樣本,例如“D”。
您還可以嘗試以下方法:
WHERE sample = ('A' OR 'B' OR 'C')
uj5u.com熱心網友回復:
不確定正在使用什么風格的 SQL,但這里有一個示例:
Postgre -資料庫小提琴
SELECT id
FROM t
GROUP BY id
HAVING array_agg(sample) @> array['A', 'B', 'C']::varchar[];
-- HAVING 'A' = ANY (array_agg(sample))
-- AND 'B' = ANY (array_agg(sample))
-- AND 'C' = ANY (array_agg(sample))
急速
SELECT id
FROM t
GROUP BY id
HAVING contains(array_agg(sample), 'A')
AND contains(array_agg(sample), 'B')
AND contains(array_agg(sample), 'C')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/457453.html
標籤:sql
下一篇:根據另一列值將一列值拆分為多列
