在 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];
对于您的示例,第一种方法恰好更简单。如果您使用比范围更复杂的东西进行分桶,则第二种方法会很有用。
您好,我想按升序显示结果集。我为此创建了 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];
对于您的示例,第一种方法恰好更简单。如果您使用比范围更复杂的东西进行分桶,则第二种方法会很有用。