提高查询统计了另一列特定值不同的值

问题描述 投票:0回答:2

说我有以下格式的表:

| 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

这感觉有点言过其实,但 - 有没有简单的方法来达到理想的结果?

sql hive
2个回答
1
投票

你是接近的,但你需要聚集的两个层次。假设没有重复的行:

SELECT COUNT(*)
FROM (SELECT id
      FROM t
      WHERE Category IN ('A', 'B', 'C') 
      GROUP BY id
      HAVING COUNT(*) = 3
     ) t;

1
投票

我认为这是一个较大的表的一部分,你的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然而多次的人。

© www.soinside.com 2019 - 2024. All rights reserved.