1
sky857412 258 天前
count 一下,除以 4 ,结合 order by ,offset limit max(score)
|
2
hemingyang OP @sky857412 这个是 mysql 的写法吧, HAVING 但是好像不行
|
![]() |
3
sqfphoenix 258 天前
前四分之一 = 降序+limit(total/4)
后四分之一 = 升序+limit(total/4) |
4
hemingyang OP @sqfphoenix Oracle 没 limit 啊
|
![]() |
5
kaicity 258 天前
V2EX › MySQL
请问 SQL 怎么统计前四分之一的人数分数最大值,还有后四分之人数分数最大值? |
![]() |
6
dog82 258 天前
是不是得用开窗函数?
|
7
hemingyang OP @kaicity 没有看到 Oracle 节点, 就放在这个下面了~!
|
8
hemingyang OP @dog82 没有思路 所以发帖问论坛大佬们
|
9
uianz 258 天前
rownum 呢?
|
![]() |
10
adoal 258 天前 via iPhone
窗口函数,Oracle 里叫分析函数
|
![]() |
11
weizhen199 258 天前
这类函数 oracle 可能自己有
|
12
hemingyang OP @uianz rownum 是固定值啊, 我要取得前四分之一 这个可能是动态的
|
![]() |
13
kazarin 258 天前
我寻思 oracle 也有 PERCENTILE()啊: https://docs.oracle.com/cd/E93962_01/bigData.Doc/eql_onPrem/src/reql_expr_percentile.html
简单做法一步一步来: 第一个 CTE ,用 PERCENTILE 获得四分之一和四分之三的分数; 第二个 CTE ,原始数据 JOIN 第一个 CTE ,WHERE 分数大于四分之三,SELECT 平均分; 第二个 CTE ,原始数据 JOIN 第一个 CTE ,WHERE 分数小于四分之一,SELECT 平均分; |
![]() |
14
lenmore 258 天前
用 percent_rank 窗口函数,然后对 pct 分组,统计出各组的平均分。
e.g. select floor(pct*100 /25) as grp, avg(n) from ( select n, percent_rank() over(order by n) as pct from public.global_number order by n ) as t group by floor(pct*100 /25) order by grp |
15
haimianbihdata 258 天前 via Android
开窗函数可以
|
![]() |
16
xuanbg 257 天前
子查询先查出前 1/4 和后 1/4 的数据,然后再计算结果。建议使用 with xxx as (select …… from ……)语法。
|