3

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

我已经计算出如何计算一个月内的标签数量,但没有计算出如何比较它们。这是我到目前为止所拥有的:

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

https://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 个月之间的变化率。它们之间的差异是变化率的变化率。就像加速一样。

[这是新技术发展的信号,通常在非常特定的用途中开始很小。那个小区域的人们互相交谈,好的想法在连锁反应中得到传递:一个人告诉两个人,他们每个人又告诉两个人,依此类推。该利基市场可能会在一段时间后完全转换,并且可能会传播到另一个类似的利基市场。参见“创新者困境”作者的“Seeing What's Next”。]


这是使用 JNK 答案的更高版本: https ://data.stackexchange.com/stackoverflow/q/92869/query-tags-with-highest-increase-in-growth-over-3-months

而且...增长最快的标签是... facebook-c#-sdk。不知道这有多有用,但这是浏览 SO 的一种有趣方式。

4

1 回答 1

3

使用#Temp 表:

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

这对我来说很好!

于 2011-02-15T14:11:21.377 回答