|
sky857412Sep 13, 2022
1
count 一下,除以 4 ,结合 order by ,offset limit max(score)
|
|
2
@sky857412 这个是 mysql 的写法吧, HAVING 但是好像不行
|
|
sqfphoenixSep 13, 2022
3
前四分之一 = 降序+limit(total/4)
后四分之一 = 升序+limit(total/4) |
|
4
@sqfphoenix Oracle 没 limit 啊
|
|
hyperosSep 13, 2022
5
V2EX › MySQL
请问 SQL 怎么统计前四分之一的人数分数最大值,还有后四分之人数分数最大值? |
|
dog82Sep 13, 2022
6
是不是得用开窗函数?
|
|
7
@kaicity 没有看到 Oracle 节点, 就放在这个下面了~!
|
|
8
@dog82 没有思路 所以发帖问论坛大佬们
|
|
uianzSep 13, 2022
9
rownum 呢?
|
|
adoalSep 13, 2022 via iPhone
10
窗口函数,Oracle 里叫分析函数
|
|
weizhen199Sep 13, 2022
11
这类函数 oracle 可能自己有
|
|
12
@uianz rownum 是固定值啊, 我要取得前四分之一 这个可能是动态的
|
|
kazarinSep 13, 2022
13
我寻思 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 平均分; |
|
lenmoreSep 13, 2022
14
用 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 |
|
haimianbihdataSep 13, 2022 via Android
15
开窗函数可以
|
|
xuanbgSep 13, 2022
16
子查询先查出前 1/4 和后 1/4 的数据,然后再计算结果。建议使用 with xxx as (select …… from ……)语法。
|