
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 hyperos 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 ……)语法。 |