首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从包含多个标记的列值中提取并显示最常用的单个标记。

从包含多个标记的列值中提取并显示最常用的单个标记。
EN

Stack Overflow用户
提问于 2022-03-22 08:31:51
回答 1查看 53关注 0票数 1

下面是我创建的表,我还插入了值:

代码语言:javascript
复制
CREATE TABLE Tag (
    Tag_Name NVARCHAR(50)
)

INSERT INTO Tag (Tag_Name)
VALUES('<wedding-crashers>')
INSERT INTO Tag (Tag_Name)
VALUES('<analysis><star-wars>')
INSERT INTO Tag (Tag_Name)
VALUES('<comedy><the-pink-panther>')
INSERT INTO Tag (Tag_Name)
VALUES('<plot-explanation><analysis><ending><tree-of-life>')
INSERT INTO Tag (Tag_Name)
VALUES('<plot-explanation><the-departed>')
INSERT INTO Tag (Tag_Name)
VALUES('<star-wars><darth-vader><casting>')
INSERT INTO Tag (Tag_Name)
VALUES('<analysis><shutter-island>')
INSERT INTO Tag (Tag_Name)
VALUES('<tree-of-life>')
INSERT INTO Tag (Tag_Name)
VALUES('<analysis><tree-of-life>')
INSERT INTO Tag (Tag_Name)
VALUES('<inception><existenz>')
INSERT INTO Tag (Tag_Name)
VALUES('<effects><melancholia>')
INSERT INTO Tag (Tag_Name)
VALUES('<hollywood><iranian>')
INSERT INTO Tag (Tag_Name)
VALUES('<plot-explanation><pontypool>')
INSERT INTO Tag (Tag_Name)
VALUES('<the-matrix><sequels><plot-explanation>')
INSERT INTO Tag (Tag_Name)
VALUES('<editing><cut><metropolis>')
INSERT INTO Tag (Tag_Name)
VALUES('<remake><akira>')
INSERT INTO Tag (Tag_Name)
VALUES('<plot-explanation><ending><blue-valentine>')
INSERT INTO Tag (Tag_Name)
VALUES('<star-wars><plot-explanation>')
INSERT INTO Tag (Tag_Name)
VALUES('<plot-explanation><saving-private-ryan>')
INSERT INTO Tag (Tag_Name)
VALUES('<film-industry>')
INSERT INTO Tag (Tag_Name)
VALUES('<analysis><pulp-fiction>')
INSERT INTO Tag (Tag_Name)
VALUES('<analysis><back-to-the-future><time-travel>')
INSERT INTO Tag (Tag_Name)
VALUES('<analysis><quentin-tarantino><film-techniques><kill-bill>')
INSERT INTO Tag (Tag_Name)
VALUES('<alfred-hitchcock><psychological-thriller><vertigo>')
INSERT INTO Tag (Tag_Name)
VALUES('<production><bridesmaids>')
INSERT INTO Tag (Tag_Name)
VALUES('<star-wars>')
INSERT INTO Tag (Tag_Name)
VALUES('<book-adaptation><harry-potter>')
INSERT INTO Tag (Tag_Name)
VALUES('<film-techniques><animation>')
INSERT INTO Tag (Tag_Name)
VALUES('<remake><fantomas>')
INSERT INTO Tag (Tag_Name)
VALUES('<muppets>')
INSERT INTO Tag (Tag_Name)
VALUES('<muppets>')

现在的问题是:

哪一个标签使用最频繁?

为了取得这一结果,我曾尝试过:

代码语言:javascript
复制
SELECT Tag_Name AS 'Single most frequent Tag'
    , MAX([Tag Count]) AS 'Maximum Tag Count'
FROM (
    SELECT Tag_Name,COUNT(Tag_Name) AS 'Tag Count'
    FROM Tag
    GROUP BY Tag_Name
) A
GROUP BY Tag_Name
ORDER BY [Maximum Tag Count] DESC

我得到的结果如下:

这个结果的问题在于它显示了木偶是使用最频繁的标记。这是因为查询将木偶识别为其中只有单个标记的唯一列值。

如果您从屏幕截图中看到,可能plot-explanation星战是使用最频繁的标记,但它们不是单独使用的,这就是我的查询无法识别和隔离它们的原因。

我试图实现的是提取最常用的标记,如plot-explanation星战,并用一行显示结果,如下所示:

代码语言:javascript
复制
Single most common Tag  Maximum Tag Count
<plot-explanation>      26

我试图用我的查询实现这个结果,但是我的查询无法提取或隔离一个标签,比如plot-explanation星战。相反,它只识别木偶,这是因为木偶是自己的,并且在两个不同的行中被自己重复。

怎么解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2022-03-22 08:39:01

您应该将数据规范化,并表示每个记录的一个标记。使用此表定义:

代码语言:javascript
复制
CREATE TABLE Tag (
    ID int Tag_Group NOT NULL,
    Tag_Name NVARCHAR(50)
)

下面是插入脚本的第一部分,更新后每个记录只有一个标记:

代码语言:javascript
复制
INSERT INTO Tag (ID, Tag_Name)
VALUES (1, '<wedding-crashers>');
INSERT INTO Tag (ID, Tag_Name)
VALUES (2, '<analysis>');
INSERT INTO Tag (ID, Tag_Name)
VALUES (2, '<star-wars>');
INSERT INTO Tag (ID, Tag_Name)
VALUES (3, '<comedy>');
INSERT INTO Tag (ID, Tag_Name)
VALUES (3, '<the-pink-panther>');

现在,要查找使用最多的标记,只需要一个简单的聚合查询:

代码语言:javascript
复制
SELECT TOP 1 WITH TIES Tag_Name
FROM Tag
GROUP BY Tag_Name
ORDER BY COUNT(*) DESC;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71568996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档