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
想出了类似的东西
select floor((revenue+49)/50)*50 as revenue_bucket,
count(1) as order_count
from Orders
group by 1;
我正在尝试编写一个 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
想出了类似的东西
select floor((revenue+49)/50)*50 as revenue_bucket,
count(1) as order_count
from Orders
group by 1;