在 Postgres 中对金额范围值进行排序(升序)

Ordering the Amount range values (Ascending Order )in Postgres

您好,我想按升序显示结果集。我为此创建了 SQL FIDDLE

select amount_range as amount_range, count(*) as number_of_items,
  sum(amount) as total_amount
from (
  select *,case
    when amount between 0.00 and 2500.00 then '<=,500.00'
    when amount between 2500.01 and 5000.00 then ',500.01 - ,000.00'
    when amount between 5000.01 and 7500.00 then ',000.01 - ,500.00'
    when amount between 7500.01 and 10000.00 then ',500.01 - ,000.00'
    else '>,000.01' end as amount_range
  from Sales ) a
group by amount_range order by amount_range;

我的结果应该是这样的

<=,500.00          4  5000
,500.01 - ,000.00     3  12000
,000.01 - ,500.00   2    13000
,500.01 - ,000.00  1    10000
>,000.01             1   15000

最简单的方法是对每个分组中的值进行排序,例如最小值 amount:

select amount_range as amount_range,
  count(*) as number_of_items,
  sum(amount) as total_amount
from (
  select *,case
    when amount between 0.00 and 2500.00 then '<=,500.00'
    when amount between 2500.01 and 5000.00 then ',500.01 - ,000.00'
    when amount between 5000.01 and 7500.00 then ',000.01 - ,000.00'
    when amount between 7500.01 and 10000.00 then ',500.01 - ,000.00'
    else '>,000.01' end as amount_range
  from Sales ) a
group by amount_range
order by min(amount);

在 Postgres 中,您的子查询还可以 return 一个数组,其中第一个元素是所需位置,第二个元素是描述存储桶的字符串。然后,外部查询可以ORDER BY你的定位值。

select amount_range[2] as amount_range,
  count(*) as number_of_items,
  sum(amount) as total_amount
from (
  select *,case
    when amount between 0.00 and 2500.00 then ARRAY['1','<=,500.00']
    when amount between 2500.01 and 5000.00 then ARRAY['2',',500.01 - ,000.00']
    when amount between 5000.01 and 7500.00 then ARRAY['3', ',000.01 - ,000.00']
    when amount between 7500.01 and 10000.00 then ARRAY['4', ',500.01 - ,000.00']
    else ARRAY['5','>,000.01'] end as amount_range
  from Sales ) a
group by amount_range
order by amount_range[1];

对于您的示例,第一种方法恰好更简单。如果您使用比范围更复杂的东西进行分桶,则第二种方法会很有用。