这是我关于 SO 的第一个问题。所以我有一个名为 posts 的 MYSQL 表,其中包含以下列:
发布,标签 1,标签 2。
假设表格中共有 10 行。 9 个帖子仅在 tag1 中有标签,第 10 个在 tag1 和 tag2 中都有标签(tag2 中的标签在其他帖子的 tag1 中重复)。表格如下所示:
Tag1 Tag2
computer -
tv -
computer -
tv -
laptop -
bicycle -
stereo -
computer laptop
tv -
laptop -
我想要实现的功能是查询表,获取出现频率最高的标签,将它们组合在一起,然后按照频率从高到低的顺序进行排序。这是我的 mysql 查询(我正在使用 PDO):
SELECT count, tag
FROM (SELECT count(tag1) as count, tag1 as tag FROM posts) as a
UNION ALL
SELECT count(tag2) as count, tag2 as tag
FROM posts
这个查询不起作用,因为它没有向我显示每个存在的标签,而且它似乎也没有将 tag2 列中的 one 标签添加到 tag1 的结果中,而是存在重复。因此,我没有看到笔记本电脑出现 3 次,而是看到笔记本电脑出现了两次,然后又出现了一次。
我认为这可以通过 GROUP BY 解决,但是当我尝试添加 GROUP BY 时,mysql 会抛出一个通用语法错误,要求查看我的数据库服务器的文档。所以我想我不确定将 GROUP BY 放在哪里,我可能认为我的查询根本不正确。请提供任何帮助....我查看了许多其他关于将 group by 与 union 结合使用的问题,但没有找到答案,或者我对这一点的理解不够了解,无法知道何时看到答案。
最佳答案
我想你的意思是这样的(sqlfiddle):
SELECT COUNT(*), tag
FROM
(
SELECT Tag1 AS tag
FROM posts
UNION ALL
SELECT Tag2 AS tag
FROM posts
) AS alltags
GROUP BY tag
关于mysql - 在 MYSQL 查询中使用 GROUP BY 和 union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920727/