mysql - 在 MYSQL 查询中使用 GROUP BY 和 union

标签 mysql group-by union

这是我关于 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/

相关文章:

MySQL UNION 正在改变数据格式

sql - 在 SQL 中添加由任意值填充的列

sql - 如何从成绩和学分计算 GPA?

mysql - 有没有一种方法可以使用一列进行分组,但对于给定的组来说它可以等于一组值?

mysql - mysql内部连接出现sql错误

mysql - 如何修复此 MySQL 查询?

mysql - 行数,其中column1 ='value1' 和column1 ='value2' 按column2 分组

mysql - 1 列 2 结果的总和每个结果不同!如此简单但无法正常工作

php - 将 "curly"引号与数据库查询中的标准引号匹配

php - 防止数据库中的重复,而不是 ID 列