也许,我想得太多了,但我似乎无法弄清楚如何获取小数列表并将其分组为数据范围并获取每个范围的计数。理想情况下,我希望最小值始终为零,无论选定的数据如何,最大值应该是数据集的最大值。然后我应该能够提供一个除数来定义我希望将数据分为多少组。我不想使用临时表是可能的
样品组:
150.75
250.01
600.10
900.50
除数为 2 的输出将是:
| RangeStart | RangeEnd | Count |
| ---------- | -------- | ----- |
| 0 | 450.25 | 2 |
| 450.26 | 1000 | 2 |
这是查询:
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
来轻松分组。
主查询将数据表与组定义连接(注意连接条件),并计算每个组中的行数。
玩得开心;)