SQL 数量字段从大到小排序后累加,达到总值80%
时间: 2023-08-29 16:04:40 浏览: 92
可以使用 SQL 中的窗口函数和子查询来实现这个需求。以下是一个示例 SQL 语句:
```
SELECT id, quantity, cumulative_sum
FROM (
SELECT
id,
quantity,
SUM(quantity) OVER (ORDER BY quantity DESC) AS cumulative_sum,
SUM(quantity) OVER () AS total_sum
FROM table_name
) t
WHERE cumulative_sum <= 0.8 * total_sum
ORDER BY quantity DESC;
```
其中,`table_name` 是要查询的表名,`id` 是每条记录的唯一标识符,`quantity` 是要排序和累加的数量字段。子查询中使用了窗口函数 `SUM()`,通过 `ORDER BY quantity DESC` 按数量字段从大到小排序,并计算出每条记录的累加和 `cumulative_sum` 和总和 `total_sum`。在外部查询中,筛选出累加和小于等于总和的 80% 的记录,并按数量字段从大到小排序输出。
需要注意的是,这里假设每条记录的数量字段都是非负数。如果有负数的情况需要特殊处理。
阅读全文