某些背景 我的目标是获取从表(实体)返回的一组行中出现最多的“标记”。在我的案例中,一个实体是一群名人和他们的角色。我没有灵活性来破坏数据库架构。
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行,我如何找到最常出现的标签列表?
请帮助,我不知道如何最好地解决这个问题。我没有灵活性来破坏数据库模式..
答案 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
第一行是最常见的标签 希望是你在寻找的。 p>
答案 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