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

标签 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

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 个月之间的变化率。它们之间的差异是变化率的变化率。这就像加速度。

[这是新技术发展的一个信号,这些新技术通常从非常具体的用途开始。那个小区域内的人们互相交谈,好的想法在链式 react 中得到传递:一个人告诉两个人,他们每个人再告诉两个人,依此类推。那个利基市场可能会在一段时间后完全转化,也许它会传播到另一个类似的利基市场。请参阅“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 的方式。

最佳答案

使用#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​​​​​​​​​​​​​​​

这对我来说效果很好!

关于sql - 在数据资源管理器中查询增长最快的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5001393/

相关文章:

mysql - 我的sql搜索语法实现

algorithm - 如何从非实验数据(数据挖掘?)

既然 Google 已弃用其 OpenID2 提供商,那么 OpenID Connect 授权又如何?

javascript - XHTML 模式下 MathOverflow 的宝贵天赋

sql - 如何在 T-SQL 中更改 SQL Server 列名称?

sql - 从一个表中删除,除非在另一表中引用了行

mysql - 如果有记录则使用 join

algorithm - 先验算法 : Having frequent (k-1)-subsets implies being frequent?

java - 如何判断一个句子是否是疑问句(疑问句)?