返回信息流一个table有三列id,tag,count,现在要按id来group,取max(count),然后tag这一列取max(count)时的tag.
也就是说,假如现在是这样的
id tag count
---------------
1 tag1 12
1 tag2 17
2 tag1 24
2 tag3 11
那么output应该是
id tag count
---------------
1 tag2 17
2 tag1 24
我现在想的方法就是先group by id,取max(count),然后把这个结果再和原表按max(count)来join。
这样肯定可以得到结果,但是因为原表很大(2000W行,大概),而且count这样没有index的列来join肯定更慢,所以很希望问一下大家有没有什么快一些的办法。
这是一条镜像帖。来源:北邮人论坛 / database / #5850同步于 2011/8/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
sqlserver里group之后,聚合列的有点儿特别的处理问题
whui
2011/8/3镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
这样?
declare @orig table
( id int, tag varchar(50), viewcount int)
insert into @orig values
(1, 'tag1', 12)
insert into @orig values
(1, 'tag2', 17)
insert into @orig values
(2, 'tag1', 24)
insert into @orig values
(2, 'tag3', 11)
select id, tag,viewcount from
(
select id, Row_Number() over (partition by id order by viewcount desc) rownum,tag,viewcount from @orig
) AS mid
where mid.rownum=1
恩,08的话,要是跑不通的话在rownum前加一个as,这样我觉得肯定比级联表查询速度高些,但是不一定可取,要一次把数据读到内存,你这么大数据量不清楚可行不,我建议还是分批读数据,在逻辑层或者用存储过程再做一次处理。