按发生次数排序结果
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
或任何其他数字。我的版本将按受欢迎程度的降序生成所有内容。
【讨论】:
以上是关于按发生次数排序结果的主要内容,如果未能解决你的问题,请参考以下文章