如何获取某个范围内数据的聚合计数?

问题描述 投票:0回答:1

也许,我想得太多了,但我似乎无法弄清楚如何获取小数列表并将其分组为数据范围并获取每个范围的计数。理想情况下,我希望最小值始终为零,无论选定的数据如何,最大值应该是数据集的最大值。然后我应该能够提供一个除数来定义我希望将数据分为多少组。我不想使用临时表是可能的

样品组:

150.75
250.01
600.10
900.50

除数为 2 的输出将是:

| RangeStart | RangeEnd | Count |
| ---------- | -------- | ----- |
| 0          | 450.25   |   2   |
| 450.26     | 1000     |   2   |
postgresql
1个回答
0
投票

这是查询:

WITH ranges AS (
    WITH datas AS (
        SELECT
            10 AS group_count,
            MAX(column_name) AS maximum
        FROM
            table_name
    )
    SELECT
        group_no,
        datas.maximum / datas.group_count * group_no AS group_min,
        datas.maximum / datas.group_count * (group_no + 1) AS group_max
    FROM
        datas,
        generate_series(0, datas.group_count - 1) AS group_no
)
SELECT
    ranges.group_no,
    ranges.group_min,
    ranges.group_max,
    COUNT(*)
FROM
    table_name
    JOIN ranges
    ON (column_name >= ranges.group_min AND column_name < ranges.group_max)
GROUP BY
    ranges.group_no,
    ranges.group_min,
    ranges.group_max
ORDER BY
    ranges.group_no

您需要将

table_name
column_name
替换为正确的名称。


简短说明:

我使用(嵌套)

WITH
查询。首先命名为
datas
,用于传递参数要分成多少组,并统计数据集中的最大值。

第二个

WITH
查询(
ranges
)用于获取每组的最小值和最大值。我使用
group_no
来轻松分组。

主查询将数据表与组定义连接(注意连接条件),并计算每个组中的行数。

玩得开心;)

© www.soinside.com 2019 - 2024. All rights reserved.