假设我有一张表格,格式如下:
| id | category|
|----|---------|
| 10 | A |
| 10 | B |
| 10 | C |
| 2 | C |
我想计算在类别变量中具有所有三个值 A、B 和 C 的不同 id 的数量。在这种情况下,查询将返回,1
因为只有 id = 10 才是真的。
我的直觉是编写以下查询来获取此值:
SELECT
COUNT(DISTINCT id),
SUM(CASE WHEN category = 'A' THEN 1 else 0 END) AS A,
SUM(CASE WHEN category = 'B' THEN 1 else 0 END) AS B,
SUM(CASE WHEN category = 'C' THEN 1 else 0 END) AS C
FROM
table
GROUP BY
id
HAVING
A >= 1
AND
B >= 1
AND
C >= 1
不过,这感觉有点过头了——有没有更简单的方法来实现预期的结果?
您很接近,但您需要两个级别的聚合。假设没有重复的行:
SELECT COUNT(*)
FROM (SELECT id
FROM t
WHERE Category IN ('A', 'B', 'C')
GROUP BY id
HAVING COUNT(*) = 3
) t;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句