一个分组取最大值并且排重的SQL
比较典型,记录在这里,处理分组获取最大值后排重的问题。
- /*
- 要求:
- 有一张表,字段和内容如下,
- id category name clickdownload
- ---------------------------------------
- 11A11108
- 21B12108
- 32C3334
- 42D22108
- 53E2151
- 63F3268
- 现在需要按category分组,每个类别只要一个结果,取download最大的那个,并且如果download
- 最大值有重复的,只取第一个。如上表,我想要取出来的结果是:
- id category name click download
- --------------------------------------
- 11A11108
- 42D22108
- 63F3268
- 遇到的问题:现在卡在了如果一个类别的download最大值有重复的情况下,会把最大值重复的行一起取出来。
- */
- --测试sql
- declare @temp table
- (
- id int,
- category int,
- name varchar(20),
- click int,
- download int
- )
- insert into @temp
- select 1,1,'A',11,108 union all
- select 2,1,'B',12,108 union all
- select 3,2,'C',33,34 union all
- select 4,2,'D',22,108 union all
- select 5,3,'E',21,51 union all
- select 6,3,'F',32,68
- --主要是2次,一次获取排名,一次排重,排重算法取最大或者最小id都可以
- select t.* from @temp t,(
- select MAX(t1.id) as id,t1.category from @temp t1,(
- select MAX(download) as download,category from @temp
- group by category) t2
- where t1.category=t2.category and t1.download=t2.download
- group by t1.category
- ) tt
- where t.id=tt.id
- /*
- idcategorynameclickdownload
- ----------- ----------- -------------------- ----------- -----------
- 21B12108
- 42D22108
- 63F3268
- (3 行受影响)
- */
【一个分组取最大值并且排重的SQL】转载于:https://blog.51cto.com/oswica/494615
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 一个人的碎碎念
- 七年之痒之后
- 我从来不做坏事
- 异地恋中,逐渐适应一个人到底意味着什么()
- 迷失的世界(二十七)
- 取名——兰
- live|live to inspire 一个普通上班族的流水账0723
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾