MySQL - 如何在行列表中查找最常出现的“标记”

时间:2015-03-20 20:45:50

标签: mysql sql database

某些背景 我的目标是获取从表(实体)返回的一组行中出现最多的“标记”。在我的案例中,一个实体是一群名人和他们的角色。我没有灵活性来破坏数据库架构。

e.g。 (快速SQL表格结构)

ENTITYNAME (varchar)
TAG1 (varchar)
TAG2 (varchar)
TAG3 (varchar)
TAG4 (varchar)
TAG5 (varchar)

返回示例行:

ENTITYNAME      TAG1            TAG2            TAG3                TAG4            TAG5
Warren Buffett  CEO             Investor        Philathropist       Billionaire 
Bill gates      Billionaire     Visionary       CEO                 Visionary
Steve Jobs      Visionary       CEO             
Oprah           Celebrity       Entertainment

我想做什么? 获取返回的SQL行中最常见的TAG。对于上面的例子,我期待得到“CEO”(因为它在4条记录中出现了3次)。 假设,一个SQL查询返回上面的n行,我如何找到最常出现的标签列表?

请帮助,我不知道如何最好地解决这个问题。我没有灵活性来破坏数据库模式..

2 个答案:

答案 0 :(得分:1)

你可以这样做: 制作5个这样的工会:

SELECT Tag1 as Tag FROM Table 
UNION ALL 
SELECT Tag2 as Tag FROM Table 
UNION ALL 
SELECT Tag3 as Tag FROM Table 
UNION ALL 
SELECT Tag4 as Tag FROM Table 
UNION ALL 
SELECT Tag5 as Tag FROM Table

并用它创建一个视图。然后:

SELECT Tag, COUNT(Tag) FROM myView GROUP BY Tag ORDER BY COUNT(Tag) DESC

第一行是最常见的标签 希望是你在寻找的。

答案 1 :(得分:0)

如果您想要common tags between all columns,请使用join

select t1.tag1 as tg from table_name t1
join table_name t2 on t1.tag1=t2.tag2
join table_name t3 on t2.tag2=t3.tag3
join table_name t4 on t3.tag3=t4.tag4
join table_name t5 on t4.tag4=t5.tag5

但是如果你想要most common tag,那么在子查询中使用带有count的{​​{1}}

UNION ALL
相关问题