查询数据资源管理器中增长最快的标签?

时间:2011-02-15 08:40:30

标签: sql data-mining stackexchange dataexplorer

我想比较两个月之间标签的受欢迎程度,按照最大的变化排序。

我已经弄清楚如何计算一个月内的标签数量,但不知道如何比较它们。这是我到目前为止所做的:

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个,所以它不需要永远。)

但我无法弄清楚如何以这种方式组合两个查询 - 我认为你应该能够嵌套它们,但我无法让它工作。另一种方法是创建一个临时表 - 对我来说似乎效率低下,但也许这是正确的方法?

非常感谢您的帮助!


顺便说一下:接下来我想做什么:

  1. 在此之后,我想找到增长率(而不仅仅是数字的绝对变化)。这只是(new-old)/old。像速度一样,但标准化。

  2. 然后,生长速度增加最多的标签 - 即具有指数增长的标签。这需要3个月:计算第1个月和第2个月之间以及第2个月和第3个月之间的变化率。这些变化之间的差异是变化率的变化率。这就像加速一样。

  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的有趣方式。

1 个答案:

答案 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​​​​​​​​​​​​​​​

这对我来说很好!