【问题标题】:Count every distinct tag计算每个不同的标签
【发布时间】:2012-08-29 13:08:41
【问题描述】:
SELECT GROUP_CONCAT(DISTINCT tag) AS tags, filename, COUNT(tag) AS count
FROM dados
GROUP BY filename
ORDER BY filename 

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

【问题讨论】:

    标签: sql tags count distinct


    【解决方案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
    

    内部查询为每个标签创建您想要的字符串。外部将它们放在文件名级别。

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

    【讨论】:

    • 我必须将第 3 行的 'varchar' 更改为 char 才能工作;)谢谢。
    • @zppinto 。 . .我看不出有什么明显的错误。不幸的是,我无法访问我现在所在的 SQL Fiddle,所以很遗憾我无法轻松测试它。
    • 现在一切都很好,戈登! :) 我只需要将“varchar”更改为“char”就可以了! ;)
    • @zppinto 。 . .我刚刚学到了一些东西。 . . MySQL 不支持 cast 语句中的 varchar()。我不喜欢隐式转换,但在这种情况下,省略演员表可能更容易。 "CONCAT" 接受整数参数并将它们隐式转换为字符串。
    • @Gordon... 只有一件事:我如何按重复次数越多的标签排序?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多