我是新手,正在阅读一本关于数据分析的书,我一直在理解它如何计算订单值的上限和下限范围 - 我一定已经回到这个页面一段时间了。
我一直使用 excel,并认为我可能会更好地将其键入到 excel 中并尝试在那里理解它,将其分解成块,看看我可以从中推断出什么。
我已经设法在 Excel 中正确计算了它,但仍然难以完全掌握它(我没有接受过正式的数学培训!! 然后我意识到对我来说,让我的头脑有点复杂,也许我可以用不同的方式做到这一点。
以下结果对于两个版本的代码是相同的(据我所知(,但我的版本对我来说更容易阅读和理解。
谁能告诉我为什么这行不通?如果不正确?为什么?
书籍版本
SELECT lowerbound
,upperbound
,count(*) AS numorders
,min(val)
,max(val)
FROM (
SELECT (floor(val / power(10.0, sign(numdigits) * (numdigits - 1))) * power(10.0, sign(numdigits) * (numdigits - 1))) AS lowerbound
,(floor(1 + (val / power(10.0, sign(numdigits) * (numdigits - 1)))) * power(10.0, sign(numdigits) * (numdigits - 1))) AS upperbound
,o.*
FROM (
SELECT (len(cast(floor(abs(totalprice)) AS INT)) * sign(floor(totalprice))) AS numdigits
,totalprice AS val
FROM orders o
) o
) o
GROUP BY lowerbound
,upperbound
ORDER BY lowerbound
我的版本
SELECT lowerbound
,upperbound
,count(*) AS numorders
,min(val)
,max(val)
FROM (
SELECT (left(totalprice,1)*power(10,len(floor(totalprice))-1))/1000 AS lowerbound
,((left(totalprice,1)+1)*power(10,len(floor(totalprice))-1))/1000 AS upperbound
,totalprice as val
from orders) o
GROUP BY lowerbound
,upperbound
ORDER BY lowerbound
你为什么不使用特定列的最小值和最大值,这样你就会得到上限和下限