按发生次数排序结果

Posted

技术标签:

【中文标题】按发生次数排序结果【英文标题】:Order Results By Occurrence 【发布时间】:2011-09-13 12:55:32 【问题描述】:

我有以下两张表。

BookmarkTag (BookmarkID, TagID) 标签(TagID、标题)

目前我正在选择具有适当 BookmarkID 的所有标签。问题是我只想选择一次标签以避免结果重复,并且只带回出现次数最多的标签。

这是我当前的 SQL 查询:

SELECT Tag.Title 
FROM `Tag` INNER JOIN BookmarkTag 
WHERE BookmarkTag.BookmarkID = 1 AND Tag.TagID = BookmarkTag.TagID'

【问题讨论】:

【参考方案1】:

您需要将连接条件放在ON 子句中JOIN 关键字之后。 where 子句中。 您将 SQL89 与 SQL92 语法混合在一起。这可能工作我没有测试过,但这更快。

SELECT Tag.Title 
FROM `Tag` t
INNER JOIN BookmarkTag b ON (t.tagid = b.tagid)
WHERE B.BookmarkID = 1
GROUP BY t.tagid
ORDER BY count(*) DESC

为了使每个标签的结果唯一,请在 tagid 上执行 group by。 然后您可以使用 count(*) 来查看 order by 的出现次数,以查看使出现次数最多的标签浮动到顶部。(尝试始终使用 count(*),因为它比 count(afield) 快)

【讨论】:

我收到以下错误:#1052 - group 语句中的列 'tagid' 不明确【参考方案2】:
SELECT t.Title, COUNT(*) AS TitleCount
FROM BookmarkTag AS bt
INNER JOIN Tag AS t ON t.TagID = bt.TagID
GROUP BY t.Title
ORDER BY TitleCount DESC

如果您想获得 7 个最受欢迎的标题,请在查询末尾添加 LIMIT 7 或任何其他数字。我的版本将按受欢迎程度的降序生成所有内容。

【讨论】:

以上是关于按发生次数排序结果的主要内容,如果未能解决你的问题,请参考以下文章

MySQL按出现次数排序

Cassandra 按计数排序结果

如何计算快速排序期间发生的数组比较次数?

c语言中如何将按结构体中的某个元素大小,将结构体排序输出

youtube api v3 - 从播放列表中获取视频,其中包含按观看次数排序的观看次数数据

利用Linux命令行进行文本按行去重并按重复次数排序