Mysql Distinct给出语法错误-删除重复结果

标签 mysql sql

在 Stackoverflow 上某人的帮助下,我几乎达到了查询完美的地步。我需要一些帮助来调整查询以满足我的需要,我希望有人能再次帮助我。

情况是这样的,我有以下 2 个表:

Tweet

Tweet_tags

每条推文都有一个标签,一条推文可以有更多相同的标签。我想计算自发布推文以来一周内有多少条推文具有相同的标签。

这是现在的查询:

SELECT t.id
     , s.tag
     , ( SELECT COUNT(1)
           FROM twitter.tweet_tags r
           JOIN twitter.tweet q
             ON q.id = r.tweet_id
          WHERE r.tag = s.tag
            AND q.date >= t.date
            AND q.date <= t.date + INTERVAL 7 DAY
       ) AS cnt
  FROM twitter.tweet t 
  JOIN twitter.tweet_tags s 
    ON s.tweet_id = t.id
 ORDER
    BY cnt DESC

这个查询的结果是:

  | ID |     Tag      | Cnt |
-------------------------------
  | 1  |  Testtag     | 2   |
  | 2  |  Testtag     | 1   |
  | 3  |  tweettag3   | 1   |
  | 4  |  tweettag2   | 1   |

我的数据库中有 2 次 testtag,所以第一个结果是正确的,tweetag3 和 tweetag2 在我的数据库中有 1 次,所以这也很好,但是当我再次添加它们时,它们也可能会显示多个结果。我尝试在 s.tag 上使用 DISTINCT 来去除重复的结果,但这给了我一个语法错误。

所以我希望它是这样的:

  | ID |     Tag      | Cnt |
-------------------------------
  | 1  |  Testtag     | 2   |
  | 2  |  tweettag3   | 1   |
  | 3  |  tweettag2   | 1   |

有人可以帮我解决这个问题吗?如果您需要更多信息,请说出来!

谢谢!!

编辑:

表格是这样的:

Tweet
---------------
ID
Message
users_id
Date

Tweet_tags
---------------
id
tag
tweet_id

最佳答案

您可以只使用select distinct,因此查询将是:

SELECT distinct s.tag
     , ( SELECT COUNT(1)
           FROM twitter.tweet_tags r
           JOIN twitter.tweet q
             ON q.id = r.tweet_id
          WHERE r.tag = s.tag
            AND q.date >= t.date
            AND q.date <= t.date + INTERVAL 7 DAY
       ) AS cnt
  FROM twitter.tweet t 
  JOIN twitter.tweet_tags s 
    ON s.tweet_id = t.id
 ORDER
    BY cnt DESC

只需从选择中删除 id 字段即可。

如果你想要一个id,那么你可以使用隐藏列的MySQL特性:

select t.id, s.tag, . . .

group by tag
order by cnt desc

关于Mysql Distinct给出语法错误-删除重复结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14405809/

相关文章:

mysql - 只有一列的表或添加数字主键?

javascript - 有没有办法使用javascript和 Node 模块(oracledb)将csv导入到oracle数据库?

sql嵌入c程序对几个表进行排名

sql - 如何将名称和架构相同但目录不同的文本文件导入数据库?

mysql - 更新表值时执行日期算术

php - 从 PHP 和 MySQL 中的另一个表中排除项目

mysql - 如何限制单个 MySQL 数据库的存储大小

php - MYSQL - 加入或子查询问题

php - 返回结果表单查询 - 仅显示在一行上

mysql - 基准测试 INNER JOIN 与 SUBSELECT