SQL计算上限/下限-哪种方法正确?

时间:2019-02-10 06:49:10

标签: sql histogram correctness

我对此很陌生,正在读一本有关数据分析的书,我一直坚持了解它如何计算定单值的上下限范围-我一定要回到本页现在。

我一直都在使用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

1 个答案:

答案 0 :(得分:0)

为什么不使用特定列的Min和Max,所以您将获得上限和下限