我想比较两个月之间标签的受欢迎程度,按照最大的变化排序。
我已经弄清楚如何计算一个月内的标签数量,但不知道如何比较它们。这是我到目前为止所做的:
select TOP 10
tags.tagname, count(*) AS tagcount
from Posts
INNER JOIN PostTags ON PostTags.PostId = Posts.id
INNER JOIN Tags ON Tags.id = PostTags.TagId
where
datepart(year, Posts.CreationDate) = 2011 and
datepart(month, Posts.CreationDate) = 1
Group by tags.tagname
Order by tagcount DESC
http://data.stackexchange.com/stackoverflow/qe/924/query-count-tags-from-daterange
(注意:您可以克隆,编辑并运行)
我是SQL的新手。我似乎只需要为上个月(2010年12月)创建第二个查询,然后将这两个查询与prevMonth.count - nextMonth.count
的列组合在一起,并按该列排序(只获取前X个,所以它不需要永远。)
但我无法弄清楚如何以这种方式组合两个查询 - 我认为你应该能够嵌套它们,但我无法让它工作。另一种方法是创建一个临时表 - 对我来说似乎效率低下,但也许这是正确的方法?
非常感谢您的帮助!
在此之后,我想找到增长率(而不仅仅是数字的绝对变化)。这只是(new-old)/old
。像速度一样,但标准化。
然后,生长速度增加最多的标签 - 即具有指数增长的标签。这需要3个月:计算第1个月和第2个月之间以及第2个月和第3个月之间的变化率。这些变化之间的差异是变化率的变化率。这就像加速一样。
[这是新技术发展的信号,通常在非常具体的用途中开始变小。那个小区域的人们互相交谈,好的想法在一个连锁反应中得到传递:一个人告诉两个人,他们各自讲两个,依此类推。那个利基可能会在一段时间后完全转换,也许它会传播到另一个类似的利基市场。通过 Innovator's Dilemma 看看“看下一步是什么”。 ]
这是一个更高版本,使用JNK的答案: http://data.stackexchange.com/stackoverflow/q/92869/query-tags-with-highest-increase-in-growth-over-3-months
而且...增长最快的标签是...... facebook-c#-sdk。 Dunno这是多么有用,但它是浏览SO的有趣方式。
答案 0 :(得分:3)
使用#Temp Tables:
-- QUERY: count tags from daterange
-- TODO: compare from two different dateranges...
select TOP 10
tags.tagname, count(*) AS tagcount
INTO #TagCountTemp1
from Posts
INNER JOIN PostTags ON PostTags.PostId = Posts.id
INNER JOIN Tags ON Tags.id = PostTags.TagId
where
datepart(year, Posts.CreationDate) = 2011 and
datepart(month, Posts.CreationDate) = 1
Group by tags.tagname
Order by tagcount DESC
select TOP 10
tags.tagname, count(*) AS tagcount
INTO #TagCountTemp2
from Posts
INNER JOIN PostTags ON PostTags.PostId = Posts.id
INNER JOIN Tags ON Tags.id = PostTags.TagId
where
datepart(year, Posts.CreationDate) = 2010 and
datepart(month, Posts.CreationDate) = 12
Group by tags.tagname
Order by tagcount DESC
SELECT TOP 10
t2.tagname, t2.tagcount as 'Month 1', t1.tagcount as 'Month 2', (t1.tagcount-t2.tagcount) as 'Increase'
FROM #TagCountTemp1 as t1
LEFT JOIN #TagCountTemp2 as t2
ON T1.tagname = t2.tagname
ORDER BY (t1.tagcount-t2.tagcount) desc
这对我来说很好!