选择语句中的 SQL 增量列值
Posted
技术标签:
【中文标题】选择语句中的 SQL 增量列值【英文标题】:SQL Increment column value in select statement 【发布时间】:2015-07-22 08:49:35 【问题描述】:我正在尝试编写一个 Select
语句,它将 column
的值增加 50,但范围最终可能是 200,000,因此我无法在 case 语句中手动完成所有操作。
与此类似,但不是手动编写increments
Select count(order_id) as order_count,
case when revenue between 0 and 50 then ‘$50’
when order_value between 51 and 100 then ‘$100’
else ‘over $101’
end as revenue_bucket
from Orders
group by 2
【问题讨论】:
那么,单列,每行加50? 类似:收入 - (revenue % 50) + 50? 【参考方案1】:把你的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 美元。
【讨论】:
这将在51-100
存储桶中对50
进行排序(简单修复:从收入中减去1)
@Andomar 好点。答案已更新,但只减去一美分而不是一美元。【参考方案2】:
您可以使用模数来获得这个。在您的示例中,限制为 101。您所要做的就是将结果转换为字符串并在其前面添加 $
Select count(order_id) as order_count,
case when revenue < limit then revenue - (revenue % 50) + 50
else ‘over $101’
end as revenue_bucket
from Orders
group by 2
【讨论】:
呃,你是对的 :) 我会在几秒钟内移除 cmets +1 k,我只是想知道我是不是做错了什么,没问题^^【参考方案3】:您可以使用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.
【讨论】:
【参考方案4】:想出了类似的东西
select floor((revenue+49)/50)*50 as revenue_bucket,
count(1) as order_count
from Orders
group by 1;
【讨论】:
以上是关于选择语句中的 SQL 增量列值的主要内容,如果未能解决你的问题,请参考以下文章