如何在一秒钟内根据计数和字符串查询顶级记录组 table
How to query top record group conditional on the counts and strings in a second table
我拜访SQL网络大神!!哦,我非常需要你的帮助来解决这个问题,我的生计就靠它了。我在 Alteryx 中用了大约 2 分钟就解决了这个问题,但我需要在 SQL 中编写此查询,而且在复杂的混合和语法方面我对这种语言还比较陌生。
非常感谢您的帮助!! :) xoxox 我无法开始描述
使用SSMS我需要用2tables 'searches'和'events'来查询...
在 Table 'searches'
中唯一搜索 ID 数量最多的前 2 [用户]
条件列表中的[用户]在'events'中至少有1个eventid,其中[事件类型]以“great”开头
这是一个需要发生的事情的例子
search event and end result example
到目前为止我仅有的作品如下,但是天啊天哪,请不要笑 :(
我想做的是..
select table 的唯一用户,搜索次数为 table
inner join selected table from 1 on userid with a table described in 3
创建 table 个具有 [type] 以“great”开头的事件计数的唯一用户 ID
过滤内部连接 table 以获得第 1 步中的前 2 个搜索计数
SELECT 用户 ID,COUNT() 作为搜索计数
来自搜索
按用户 ID 分组
INNER JOIN (SELECT userid, COUNT() as eventcount
FROM events WHERE LEFT(type, 5) = "great" AND eventcount>0 Group by userid)
ON searches.userid=events.userId
显然,这根本行不通!!!我认为我的结构不对,我过滤“伟大”的方法是错误的。我也不知道如何在不影响内部连接的情况下将“top 2”子句添加到搜索 table 查询中。这段代码需要相当高效,所以如果你有更好的计算效率更高的想法......我爱你很久了
我认为你需要 exists
和 windows 功能 dense_rank
如下:
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
希望以上查询能为您服务。
我拜访SQL网络大神!!哦,我非常需要你的帮助来解决这个问题,我的生计就靠它了。我在 Alteryx 中用了大约 2 分钟就解决了这个问题,但我需要在 SQL 中编写此查询,而且在复杂的混合和语法方面我对这种语言还比较陌生。 非常感谢您的帮助!! :) xoxox 我无法开始描述
使用SSMS我需要用2tables 'searches'和'events'来查询...
在 Table 'searches'
中唯一搜索 ID 数量最多的前 2 [用户]条件列表中的[用户]在'events'中至少有1个eventid,其中[事件类型]以“great”开头
这是一个需要发生的事情的例子
search event and end result example
到目前为止我仅有的作品如下,但是天啊天哪,请不要笑 :(
我想做的是..
select table 的唯一用户,搜索次数为 table
inner join selected table from 1 on userid with a table described in 3
创建 table 个具有 [type] 以“great”开头的事件计数的唯一用户 ID
过滤内部连接 table 以获得第 1 步中的前 2 个搜索计数
SELECT 用户 ID,COUNT() 作为搜索计数 来自搜索 按用户 ID 分组 INNER JOIN (SELECT userid, COUNT() as eventcount FROM events WHERE LEFT(type, 5) = "great" AND eventcount>0 Group by userid) ON searches.userid=events.userId
显然,这根本行不通!!!我认为我的结构不对,我过滤“伟大”的方法是错误的。我也不知道如何在不影响内部连接的情况下将“top 2”子句添加到搜索 table 查询中。这段代码需要相当高效,所以如果你有更好的计算效率更高的想法......我爱你很久了
我认为你需要 exists
和 windows 功能 dense_rank
如下:
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
希望以上查询能为您服务。