GROUP BY ColA 在 ColaB 中具有各种列值
GROUP BY ColA having various column values in ColB
我想 select ColA
的所有不同值,其中每个元素至少有一个来自 ColB
中给定值集的每个元素
样本table:
ColA ColB
A 1
A 2
B 1
C 2
C 2
D NULL
E 1
E 2
E 2
E 3
期望的结果:所有至少有一次 1 和 2 作为 ColB 值的 ColA 值:
A (has 1 once, has 2 once)
E (has 1 once, has 2 twice)
我知道我必须使用 GROUP BY
但不知道确切的聚合函数,我应该使用哪个?
SELECT ... FROM MyTable
GROUP BY ColA
HAVING at_least_values(ColB, (1, 2)) // something like this
什么是好的解决方案?
您可以使用条件逻辑计算 having
子句中的值:
having sum(case when colB = 1 then 1 else 0 end) >= 1 and
sum(case when colB = 2 then 1 else 0 end) >= 1
intersect
是一种方法。
SELECT ColA FROM MyTable where colB = 1
intersect
SELECT ColA FROM MyTable where colB = 2
你走在正确的轨道上。您可以使用 WHERE 子句过滤 ColB 中的所有 1 和 2。然后使用 HAVING 子句过滤具有两个值(DISTINCT COUNT of 2)的记录。
-- Return all ColA with a ColB of 1 and 2.emphasized text
SELECT
ColA
FROM
Mytable
WHERE
ColB IN (1, 2) -- Only 1s and 2s required.
GROUP BY
ColA
HAVING
COUNT(DISTINCT ColB) = 2 -- Must have both values.
或者您可以使用 INTERSECT 运算符。这使您可以查找同时出现在两个查询中的记录。请参阅下面的示例。
SELECT
ColA
FROM
Mytable
WHERE
ColB = 1
GROUP BY
ColA
INTERSECT
SELECT
ColA
FROM
Mytable
WHERE
ColB = 2
GROUP BY
ColA
我想 select ColA
的所有不同值,其中每个元素至少有一个来自 ColB
样本table:
ColA ColB
A 1
A 2
B 1
C 2
C 2
D NULL
E 1
E 2
E 2
E 3
期望的结果:所有至少有一次 1 和 2 作为 ColB 值的 ColA 值:
A (has 1 once, has 2 once)
E (has 1 once, has 2 twice)
我知道我必须使用 GROUP BY
但不知道确切的聚合函数,我应该使用哪个?
SELECT ... FROM MyTable
GROUP BY ColA
HAVING at_least_values(ColB, (1, 2)) // something like this
什么是好的解决方案?
您可以使用条件逻辑计算 having
子句中的值:
having sum(case when colB = 1 then 1 else 0 end) >= 1 and
sum(case when colB = 2 then 1 else 0 end) >= 1
intersect
是一种方法。
SELECT ColA FROM MyTable where colB = 1
intersect
SELECT ColA FROM MyTable where colB = 2
你走在正确的轨道上。您可以使用 WHERE 子句过滤 ColB 中的所有 1 和 2。然后使用 HAVING 子句过滤具有两个值(DISTINCT COUNT of 2)的记录。
-- Return all ColA with a ColB of 1 and 2.emphasized text
SELECT
ColA
FROM
Mytable
WHERE
ColB IN (1, 2) -- Only 1s and 2s required.
GROUP BY
ColA
HAVING
COUNT(DISTINCT ColB) = 2 -- Must have both values.
或者您可以使用 INTERSECT 运算符。这使您可以查找同时出现在两个查询中的记录。请参阅下面的示例。
SELECT
ColA
FROM
Mytable
WHERE
ColB = 1
GROUP BY
ColA
INTERSECT
SELECT
ColA
FROM
Mytable
WHERE
ColB = 2
GROUP BY
ColA