【发布时间】:2020-08-09 12:41:50
【问题描述】:
我对 SQL 很陌生,很难弄清楚如何将 row1 (101) 除以 row2 (576)。
COUNT
101
576
我希望输出为单个值,以小数点后 2 位表示。
有什么建议吗?
感谢您的帮助
【问题讨论】:
标签: sql postgresql decimal divide
我对 SQL 很陌生,很难弄清楚如何将 row1 (101) 除以 row2 (576)。
COUNT
101
576
我希望输出为单个值,以小数点后 2 位表示。
有什么建议吗?
感谢您的帮助
【问题讨论】:
标签: sql postgresql decimal divide
对于两行,这很容易。 如果你有一个很大的输入表,并且你想将第一行除以第二行,第三行除以第四行等等,那么你需要一个排序列来保存自己。
因此,对于一个两行表(请记住,表从不排序),您只需要将较小的数字除以较大的数字即可。
这里是:
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
但是,如果您有很多行,并且您总是需要将第一行除以第二行,将第三行除以第四行,即顺序中的每个奇数行除以顺序中的下一个偶数行,那么你需要一个排序列。
您的问题正是您所建议的,还是有更多问题?
【讨论】:
表中不存在行“1”或“2”之类的东西。表格代表 无序 集合,因此如果没有指定顺序的列,则没有第一行或第二行。
您可以使用聚合来除以最小值除以最大值:
select min(count) * 1.0 / max(count)
from t;
注意* 1.0。 Postgres 做整数除法,所以你想转换成带小数点的东西。
【讨论】: