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