MySQL循环遍历列中的每个值

时间:2017-06-28 11:21:34

标签: mysql sql stored-procedures

我有一个包含2列的表格: idtag

我希望获得一个包含idcount_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

2 个答案:

答案 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;