说我有以下格式的表:
| id | category|
|----|---------|
| 10 | A |
| 10 | B |
| 10 | C |
| 2 | C |
我想算不同的ID所具有的类别变量的所有三个值A,B和C的数量。在这种情况下,查询将返回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;
我认为这是一个较大的表的一部分,你的ID和类别可以多次出现,并且仍然是不同的,由于其他领域,你知道你有多少种类寻找。
SELECT ID, COUNT(ID)
FROM(
SELECT DISTINCT ID, CATEGORY
FROM TABLE)
GROUP BY ID
HAVING COUNT(ID) = 3 --or however many categories you want
在这里你的子查询中删除多余的信息,并迫使你的ID,以每类一次露面。然后,您计数的次数,它显示和查询,显示您想要3然而多次的人。