SQL вычисляет верхний / нижний предел - какой путь правильный?
Я довольно новичок в этом и читаю книгу по анализу данных, я застрял в понимании того, как он вычисляет верхнюю и нижнюю границы диапазонов значений порядка - я, должно быть, уже некоторое время возвращался на эту страницу.
Я все время использую 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 ответ
Почему бы вам не использовать Min и Max определенного столбца, чтобы получить верхнюю и нижнюю границу