WITH
-- your input ...
input(counter) AS ( -- count is reserved word, use another name ...
SELECT 101
UNION ALL SELECT 576
)
-- cheat and just divide the smaller by the bigger
-- as "@Gordon Linoff" suggests
-- force a float division by adding a non-integer operand
-- and hard-cast it to DECIMAL(5,2)
SELECT
CAST(
MIN(counter) * 1.00 / MAX(counter)
AS DECIMAL(5,2)
) AS result
FROM input;
-- out result
-- out ----------
-- out 0.18
2条答案
按热度按时间yjghlzjz1#
对于两排来说,这很简单。如果您有一个很大的输入表,并且希望将第一行除以第二行,将第三行除以第四行,等等,那么您需要一个排序列来保存自己。
因此,对于一个两行表(记住,表从不排序),您只需要将较小的数除以较大的数。
下面是:
但是,如果您有许多行,并且总是需要将第一行除以第二行,将第三行除以第四行,即顺序中的每一奇数行除以下一偶数行,则需要一个排序列。
你的问题只是你的建议,还是有更多的问题?
3mpgtkmj2#
表中没有“1”或“2”行。表表示无序的集合,因此如果没有列指定顺序,就没有第一行或第二行。
可以使用聚合将最小值除以最大值:
注意
* 1.0
. postgres做整数除法,所以你想转换成小数点。