当前位置: 代码迷 >> DB2 >> 求一分组排序sql,100分解决方法
  详细解决方案

求一分组排序sql,100分解决方法

热度:7437   发布时间:2013-02-26 00:00:00.0
求一分组排序sql,100分
表A:
name           type             value
a                   t1                 1
b                   t1                 3
c                   t1                 8
d                   t1                 5
e                   t2                 2
f                   t2                 4
g                   t3                 8
h                   t3                 9
现要求一sql,按type分组查询表A数据,取每一类中按value排序前50%的记录。
即要查询到如下结果:
name             type           value
c                   t1                 8
d                   t1                 5
f                   t2                 4
h                   t3                 9

各位高手帮忙啊,实在搞不定了!

------解决方案--------------------------------------------------------
具体sql我就不写了,我只能给你一些我的想法
首先肯定要group了,然后count下每个group
利用rownumber() over(ORDER BY someField) AS rn 给每个group加上一个序号rn
选取rn < count()/2 的
基本就这个思路了。
------解决方案--------------------------------------------------------
select * from aaa as a1
where exists
(
select 1 from
(
select avg(value) as value,type from aaa group by type
)
a2 where a1.value> a2.value and a1.type=a2.type
)
------解决方案--------------------------------------------------------
SELECT * FROM
(
SELECT RANK() OVER(PARTITION BY TYPE ORDER BY VALUE DESC,NAME) RK,AAA.*
FROM AAA
)A LEFT JOIN
(
SELECT TYPE,COUNT(1) CT
FROM AAA
GROUP BY TYPE
)B ON A.TYPE=B.TYPE
WHERE A.RK <= B.CT*0.5
  相关解决方案