我有一组类似于以下格式的数据。
GROUP | ELEMENT --------------- 1 | A 1 | B 1 | C 2 | A 3 | B 4 | A 4 | B 5 | A 5 | C
我希望能够验证每个组中是否存在元素A和B.理想情况下,我只返回那些具有两个元素的组。在上面的例子中,我想只返回GROUP 1和GROUP 4。
编辑:
对不起,我不应该暗示'A'和'B'是唯一的选择。是否可以专门查看特定值的存在,例如“A”和“B”?可能还有其他可能的值。我已更新示例数据以反映这一点。
答案 0 :(得分:3)
不确定以下是否有效,但您可以尝试
SELECT group, COUNT(DISTINCT(element))
FROM table
group by group
having COUNT(DISTINCT(element)) = 2
我不确定COUNT(DISTINCT(element))
是否有效!
答案 1 :(得分:3)
这更多是Relational Division
问题,但您需要为每个GROUP
显示每个Element
。
查询:
SELECT a.*
FROM TableName a
WHERE EXISTS
(
SELECT 1
FROM TableName b
WHERE a."GROUP" = b."GROUP" AND
b."ELEMENT" IN ('A','B')
GROUP BY b."GROUP"
HAVING COUNT(*) = 2
)
输出
╔═══════╦═════════╗
║ GROUP ║ ELEMENT ║
╠═══════╬═════════╣
║ 1 ║ A ║
║ 1 ║ B ║
║ 1 ║ C ║
║ 4 ║ A ║
║ 4 ║ B ║
╚═══════╩═════════╝
但如果您只想返回GROUP
,则只需使用下面的
SELECT "GROUP"
FROM TableName b
WHERE "ELEMENT" IN ('A','B')
GROUP BY "GROUP"
HAVING COUNT(*) = 2
输出
╔═══════╗
║ GROUP ║
╠═══════╣
║ 1 ║
║ 4 ║
╚═══════╝
答案 2 :(得分:1)
此查询将返回所有GROUP(ID)和ELEMENT(名称),其中每个GROUP恰好有2个不同的元素。更改HAVING
子句以修改“完全相同的2个ELEMENTS”规则。
SELECT GROUP, ELEMENT
FROM MyTable
WHERE GROUP in
(SELECT GROUP from MyTable
GROUP BY GROUP
HAVING COUNT (DISTINCT ELEMENT)=2
)
答案 3 :(得分:0)
> SELECT ID,
> ELEMENT FROM STACK WHERE ID IN
> (SELECT ID
> FROM
> (SELECT id AS ID,
> COUNT(DISTINCT(element)) AS B
> FROM STACK
> WHERE ELEMENT IN ('A',
> 'B')
> GROUP BY id HAVING COUNT(DISTINCT(element)) >1)A) AND ELEMENT IN ('A',
> 'B');
** ID 是问题中的列 组,表名称是堆栈< /强>
如果我们删除“ELEMENT IN”条件,我们将能够获得所有拥有多个元素的组
答案 4 :(得分:0)
它返回的组只有元素A和B
SELECT a.*
FROM Table a
WHERE EXISTS
(
SELECT 1
FROM Table b
WHERE a.group = b.group
GROUP BY b.group
HAVING COUNT(distinct element) = 2
)
and a.element IN ('A','B')