给出sqlite表结构如下
id tag1 tag2 tag3
1 foo bar baz
2 foo baz moo
3 baz woo bar
4 bar foo
5 foo
我想要的是计算每个标签的出现次数而不依赖于其列。
如何在所有标记字段上查询标记并对其进行分组?
我想要的是像
foo: 4
bar: 3
baz: 3
moo: 1
woo: 1
我不知道如何查询所有标记字段。
SELECT (tag1,tag2,tag3) as tag, COUNT(id) AS amount FROM tbl GROUP BY tag
显然没有成功..:/
我读到了关于CONCAT,GROUP_CONCAT,SELECT DISTINCT,......但它们似乎都不是我想要的。
我甚至不知道该搜索什么/如何描述我想要的东西所以我的研究无处可去。
任何可以提供帮助的人?会很好! Thx提前
此致
答案 0 :(得分:0)
使用union all
和group by
:
select tag, count(*)
from ((select tag1 as tag from tbl) union all
(select tag2 as tag from tbl) union all
(select tag3 as tag from tbl)
) t
where tag is not null
group by tag
order by count(*) desc;
注意:您应该重新访问您的数据结构。通常,具有相同类型值的多个列不是最佳结构。您可能想要另一个表,每个id / tag有一行:
id tag
1 foo
1 bar
1 baz
. . .