Sql 红移-百分比上的第一个值

Sql 红移-百分比上的第一个值,sql,amazon-redshift,window-functions,Sql,Amazon Redshift,Window Functions,我花了几天时间想弄明白,但我不知所措 我有不同组的会话数,我想得到80%的组ID。当然,很不可能某些群体会以一种方式结盟,使一个群体最终达到80% 我试图找到的是,我是否能够返回低于80%的所有行,然后仅返回大于或等于的第一行 以下是示例数据: +-----------+--------+--------------+----------------------+-------------+ |区域设置| id |订单|区域设置|总计|区域设置|运行|总计| pc |总计| +---------

我花了几天时间想弄明白,但我不知所措

我有不同组的会话数,我想得到80%的组ID。当然,很不可能某些群体会以一种方式结盟,使一个群体最终达到80%

我试图找到的是,我是否能够返回低于80%的所有行,然后仅返回大于或等于的第一行

以下是示例数据:

+-----------+--------+--------------+----------------------+-------------+
|区域设置| id |订单|区域设置|总计|区域设置|运行|总计| pc |总计|
+-----------+--------+--------------+----------------------+-------------+
|         1 |     68 |           92 |                   68 | 73.91304348 |
|         1 |      9 |           92 |                   77 | 83.69565217 |
|         1 |      5 |           92 |                   82 | 89.13043478 |
|         1 |      4 |           92 |                   86 | 93.47826087 |
|         1 |      1 |           92 |                   92 | 100         |
|         1 |      1 |           92 |                   89 | 96.73913043 |
|         1 |      1 |           92 |                   88 | 95.65217391 |
|         1 |      1 |           92 |                   91 | 98.91304348 |
|         1 |      1 |           92 |                   90 | 97.82608696 |
|         1 |      1 |           92 |                   87 | 94.56521739 |
|         2 |    130 |          188 |                  130 | 69.14893617 |
|         2 |     18 |          188 |                  148 | 78.72340426 |
|         2 |      9 |          188 |                  157 | 83.5106383  |
|         2 |      9 |          188 |                  166 | 88.29787234 |
|         2 |      5 |          188 |                  171 | 90.95744681 |
|         2 |      4 |          188 |                  175 | 93.08510638 |
|         2 |      3 |          188 |                  178 | 94.68085106 |
|         2 |      3 |          188 |                  181 | 96.27659574 |
|         2 |      2 |          188 |                  183 | 97.34042553 |
|         2 |      2 |          188 |                  185 | 98.40425532 |
|         2 |      1 |          188 |                  188 | 100         |
|         2 |      1 |          188 |                  186 | 98.93617021 |
|         2 |      1 |          188 |                  187 | 99.46808511 |
|         3 |   3878 |         6489 |                 3878 | 59.7626753  |
|         3 |   1823 |         6489 |                 5701 | 87.85637232 |
|         3 |    206 |         6489 |                 5907 | 91.0309755  |
|         3 |    131 |         6489 |                 6038 | 93.04977654 |
|         3 |     82 |         6489 |                 6120 | 94.31345354 |
|         3 |     69 |         6489 |                 6189 | 95.37679149 |
|         3 |     69 |         6489 |                 6258 | 96.44012945 |
|         3 |     50 |         6489 |                 6308 | 97.2106642  |
|         3 |     34 |         6489 |                 6342 | 97.73462783 |
|         3 |     26 |         6489 |                 6368 | 98.1353059  |
|         3 |     21 |         6489 |                 6389 | 98.4589305  |
|         3 |     18 |         6489 |                 6407 | 98.73632301 |
|         3 |     17 |         6489 |                 6424 | 98.99830482 |
|         3 |     10 |         6489 |                 6434 | 99.15241177 |
|         3 |      9 |         6489 |                 6452 | 99.42980428 |
|         3 |      9 |         6489 |                 6443 | 99.29110803 |
|         3 |      8 |         6489 |                 6460 | 99.55308984 |
|         3 |      6 |         6489 |                 6472 | 99.73801818 |
|         3 |      6 |         6489 |                 6466 | 99.64555401 |
|         3 |      5 |         6489 |                 6477 | 99.81507166 |
|         3 |      4 |         6489 |                 6481 | 99.87671444 |
|         3 |      4 |         6489 |                 6485 | 99.93835722 |
|         3 |      3 |         6489 |                 6488 | 99.9845893  |
|         3 |      1 |         6489 |                 6489 | 100         |
|         4 |    779 |         1636 |                  779 | 47.61613692 |
|         4 |    257 |         1636 |                 1036 | 63.32518337 |
|         4 |    102 |         1636 |                 1138 | 69.5599022  |
|         4 |     97 |         1636 |                 1235 | 75.48899756 |
|         4 |     89 |         1636 |                 1324 | 80.92909535 |
|         4 |     72 |         1636 |                 1396 | 85.33007335 |
|         4 |     47 |         1636 |                 1443 | 88.20293399 |
|         4 |     31 |         1636 |                 1474 | 90.09779951 |
|         4 |     26 |         1636 |                 1500 | 91.68704156 |
|         4 |     23 |         1636 |                 1523 | 93.09290954 |
|         4 |     21 |         1636 |                 1544 | 94.37652812 |
|         4 |     17 |         1636 |                 1561 | 95.41564792 |
|         4 |     12 |         1636 |                 1573 | 96.14914425 |
|         4 |      9 |         1636 |                 1582 | 96.6992665  |
|         4 |      8 |         1636 |                 1590 | 97.18826406 |
|         4 |      8 |         1636 |                 1598 | 97.67726161 |
|         4 |      6 |         1636 |                 1604 | 98.04400978 |
|         4 |      6 |         1636 |                 1610 | 98.41075795 |
|         4 |      5 |         1636 |                 1615 | 98.71638142 |
|         4 |      4 |         1636 |                 1623 | 99.20537897 |
|         4 |      4 |         1636 |                 1619 | 98.9608802  |
|         4 |      3 |         1636 |                 1629 | 99.57212714 |
|         4 |      3 |         163
SELECT d.*
FROM (SELECT locale_id, SUM(orders) AS orders,
             SUM(SUM(orders)) OVER (PARTITION BY locale_id) AS locale_total,
             SUM(SUM(orders)) OVER (PARTITION BY locale_id
                                    ORDER BY SUM(orders) DESC
                                    ROWS UNBOUNDED PRECEDING
                                   ) as locale_running_total
      FROM table
      GROUP BY locale_id
     ) d
WHERE (locale_running_total - orders) < 0.8 * locale_total;