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