Sql 如何根据第二个表中的计数和字符串查询顶级记录组

Sql 如何根据第二个表中的计数和字符串查询顶级记录组,sql,sql-server,inner-join,Sql,Sql Server,Inner Join,我呼吁互联网上的SQL之神!!哦,在这个问题上,我非常需要你的帮助,我的生活就靠它了。我在Alteryx中花了大约2分钟就解决了这个问题,但我需要用SQL编写这个查询,而且我对这种语言在复杂的混合和语法方面还比较陌生。 非常感谢您的帮助!!:我无法开始描述 使用SSMS,我需要使用两个表“搜索”和“事件”来查询 表“搜索”中唯一搜索ID计数最高的前2个[用户] 条件是列表中的[user]在[events type]以great开头的“events”中至少有1个eventid 下面是一个需要发生什

我呼吁互联网上的SQL之神!!哦,在这个问题上,我非常需要你的帮助,我的生活就靠它了。我在Alteryx中花了大约2分钟就解决了这个问题,但我需要用SQL编写这个查询,而且我对这种语言在复杂的混合和语法方面还比较陌生。 非常感谢您的帮助!!:我无法开始描述

使用SSMS,我需要使用两个表“搜索”和“事件”来查询

表“搜索”中唯一搜索ID计数最高的前2个[用户]

条件是列表中的[user]在[events type]以great开头的“events”中至少有1个eventid

下面是一个需要发生什么的例子

所以到目前为止,我仅有的作品如下,但男孩哦男孩请不要笑:

我想做的是

从搜索表中选择具有searchcounts的唯一用户表

将userid上1中的选定表与3中描述的表进行内部联接

创建具有事件计数的唯一用户ID表,其中[type]以great开头

筛选内部联接表中步骤1中的前2个搜索计数

选择userid,计数为searchcount 从搜索 按用户ID分组 内部联接选择用户ID,计为eventcount 从LEFTtype、5=great和eventcount>0的事件按用户ID分组 在搜索时。userid=events.userid

显然,这根本不起作用!!!我认为我的结构是错的,我的过滤方法是错误的。另外,我不知道如何在不影响内部联接的情况下将top 2子句添加到搜索表查询中。这段代码需要相当高效,所以如果你有一个更好的更高效的想法…我爱你很久了

我想你需要的是存在的和windows函数密集度排名如下:

Select * from
(Select u.userid, dense_rank() over (partition by u.userid order by count(*) desc) as rn
  From users u join searches s on u.userid = s.userid
 Where exists 
      (select 1 from events e
        Where e.userid = u.userid And LEFT(e.type, 5) = 'great')
 Group by u.userid  ) t Where rn <= 2

希望以上查询能够满足您的需要。

样本数据和期望的结果将是一种有益的牺牲。
SELECT top(2) userid, COUNT() as searchcount FROM searches 
where userid in (select userid from events where left(type, 5)='great')
GROUP BY userid
order by count() desc