我有一个包含2列的表格:
id
,tag
我希望获得一个包含id
和count_of_tag
的结果表,但有这样的特殊计数要求(对于每个id始终包含id = 1的id计算不同的标记):
对于id中的每个i:
select id, count(distinct tag) from table where id in (1,i);
我该怎么做?我只有select语句和存储过程/函数的新经验。
----样本数据-----
id |tag
1 | A
1 | B
1 | C
2 | A
2 | D
3 | C
3 | D
3 | E
----期望的结果----
id |count
1 | 3
2 | 4
3 | 5
答案 0 :(得分:0)
您似乎想要包含" 1"作为标签是否存在。怎么样?
select id,
(count(distinct tag) + (1 - max(tag = 1)))
from table
group by id;
当标记1存在时,1 - max(tag = 1)
返回0,而当标记1不存在时,返回0。
答案 1 :(得分:0)
自己想出一个解决方案:
select
id, count(distinct tag)
from
(select * from table
union
select * from
(select distinct id from table where id<>1) as t1
CROSS JOIN
(select distinct tag from table where id=1) as t2) as final
group by id;