我有两个表,tags
和coupon_tags
。 tags
包含tagName
和tagID
。每个唯一名称都有唯一的ID。例如,标记foo
可能包含tagID 1
。
然后coupon_tags
有一堆couponID
和一堆tagID
。每个标签每个优惠券有一行。当然,优惠券可能有多个标签。该表可能如下所示:
tagID | couponID
5 3
4 3
9 3
5 6
我要做的是获得前10个最常用的标签。我没有排序algos或重SQL的经验,所以我不确定如何开始。有什么帮助吗?
答案 0 :(得分:1)
这样做:
SELECT tagID, count(*) as TotalOccurrences from coupon_tags
group by tagID
order by TotalOccurrences DESC
limit 10
这将为您提供最常用的标签ID。
答案 1 :(得分:0)
使用LIMIT仅返回10行,并使用ORDER BY .. DESC获取最大值,并使用GROUP BY将标记统计在一起。
select t.tagID, t.tagName, count(*) as TimesUsed
from coupon_tags c
inner join tags t on t.tagID = c.tagID
group by t.tagID, t.tagName
order by TimesUsed DESC
limit 10;
请注意,如果第10个或更高的地方有联系,例如3 x 9或2 x 10,LIMIT 10将仅显示其中一个(随机)。如果您需要显示延伸到第11个点或更高点的关系,则需要复杂的查询。处理这个问题的一个更好的选择是获得前15名,然后在编程前端,进一步超过10,直到TimesUsed
值发生变化。
答案 2 :(得分:0)
这个怎么样?
SELECT * FROM (
SELECT T.tagID,
count(*) AS numerOfTags
FROM tags AS T
JOIN coupon_tags AS C
ON C.tagID = T.tagID
GROUP BY T.tagID
)
ORDER BY numerOfTags DESC
LIMIT 10