› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
zhangzhiming
V2EX  ›  MySQL

请问 SQL 怎么统计前四分之一的人数分数最大值,还有后四分之人数分数最大值?

  •  
  •   zhangzhiming · Sep 13, 2022 · 4059 views
    This topic created in 1516 days ago, the information mentioned may be changed or developed.

    vjkzRg.png

    16 replies  •  2022-09-13 22:13:23 +08:00
    sky857412
    sky857412
    Sep 13, 2022
    1
    count 一下,除以 4 ,结合 order by ,offset limit max(score)
    zhangzhiming
    zhangzhiming
    OP
    Sep 13, 2022
    2
    @sky857412 这个是 mysql 的写法吧, HAVING 但是好像不行
    sqfphoenix
    sqfphoenix
    Sep 13, 2022
    3
    前四分之一 = 降序+limit(total/4)
    后四分之一 = 升序+limit(total/4)
    zhangzhiming
    zhangzhiming
    OP
    Sep 13, 2022
    4
    @sqfphoenix Oracle 没 limit 啊
    hyperos
    hyperos
    Sep 13, 2022
    5
    V2EX › MySQL

    请问 SQL 怎么统计前四分之一的人数分数最大值,还有后四分之人数分数最大值?
    dog82
    dog82
    Sep 13, 2022
    6
    是不是得用开窗函数?
    zhangzhiming
    zhangzhiming
    OP
    Sep 13, 2022
    7
    @kaicity 没有看到 Oracle 节点, 就放在这个下面了~!
    zhangzhiming
    zhangzhiming
    OP
    Sep 13, 2022
    8
    @dog82 没有思路 所以发帖问论坛大佬们
    uianz
    uianz
    Sep 13, 2022
    9
    rownum 呢?
    adoal
    adoal
    Sep 13, 2022 via iPhone
    10
    窗口函数,Oracle 里叫分析函数
    weizhen199
    weizhen199
    Sep 13, 2022
    11
    这类函数 oracle 可能自己有
    zhangzhiming
    zhangzhiming
    OP
    Sep 13, 2022
    12
    @uianz rownum 是固定值啊, 我要取得前四分之一 这个可能是动态的
    kazarin
    kazarin
    Sep 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 平均分;
    lenmore
    lenmore
    Sep 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
    haimianbihdata
    haimianbihdata
    Sep 13, 2022 via Android
    15
    开窗函数可以
    xuanbg
    xuanbg
    Sep 13, 2022
    16
    子查询先查出前 1/4 和后 1/4 的数据,然后再计算结果。建议使用 with xxx as (select …… from ……)语法。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1473 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 15:44 · PVG 23:44 · LAX 07:44 · JFK 10:44
    ♥ Do have faith in what you're doing.