SQL 增加 select 语句中的列值

SQL Increment column value in select statement

我正在尝试编写一个 Select 语句,将 column 值递增 50,但范围最终可能达到 200,000,所以我无法在 case 语句中完成所有操作手动。

与此类似,但不是手动编写 increments

Select count(order_id) as order_count, 
   case when revenue between 0 and 50 then ‘’
        when order_value between 51 and 100 then ‘0’
             else ‘over 1’
   end as revenue_bucket
from Orders
group by 2

你可以用模运算来得到这个。在您的示例中,限制为 101。您所要做的就是将结果转换为字符串并在其前面添加 $

Select count(order_id) as order_count, 
    case when revenue < limit then revenue - (revenue % 50) + 50
             else ‘over 1’
  end as revenue_bucket
from Orders
group by 2

将您的 revenue 转换为存储桶值,然后从中生成字符串:

SELECT count(order_id) AS order_count, 
        '$' || ((((revenue - 0.01)/50)::int + 1) * 50)::text AS revenue_bucket
FROM Orders
GROUP BY 2;

这显然超过了 200,000 美元。

您可以使用 div(整数除法)四舍五入到最接近的 50:

revenue div 50 * 50

向上取整而不是向下取整:

(revenue div 50 + 1) * 50

要在下一个括号中包含 50 个(所以 50 个是 50 美元而不是 100 美元):

((revenue-1) div 50 + 1) * 50

示例查询:

select  revenue
,       concat('$', ((revenue-1) div 50 + 1) * 50) as revenue_bucket
from    YourTable

See it working at SQL Fiddle.

想出了类似的东西

select floor((revenue+49)/50)*50 as revenue_bucket, 
       count(1) as order_count
from Orders 
group by 1;