表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