计算每个不同的标签

时间:2012-08-29 13:08:41

标签: sql tags count distinct

SELECT GROUP_CONCAT(DISTINCT tag) AS tags, filename, COUNT(tag) AS count
FROM dados
GROUP BY filename
ORDER BY filename 

我有那个查询,它显示每部电影的所有标签,没有重复标签。但现在我想在每个标签前面显示重复次数。像这样的东西: 电影(20),火车(50)等 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

你需要一个子查询:

select filename, group_concat(tagstr separator ',') as tags,
       count(*) as NumDistinctTags,
       sum(cnt) as NumTags
from (select filename, tag,
             concat(tag, ' (', count(*), ')') as tagstr,
             count(*) as cnt
      from dados d
      group by filename, tag
     ) d
group by filename
order by filename

内部查询为每个标记创建所需的字符串。外部将它们放在文件名级别。

我假设你因为group_concat而使用MySQL。在SQL的其他方言中,concat运算符的表达方式可能不同。