【问题标题】:How to calculate the ratio of this column with 2 rows如何计算此列与 2 行的比例
【发布时间】:2020-08-09 12:41:50
【问题描述】:

我对 SQL 很陌生,很难弄清楚如何将 row1 (101) 除以 row2 (576)。

COUNT
101
576

我希望输出为单个值,以小数点后 2 位表示。

有什么建议吗?

感谢您的帮助

【问题讨论】:

    标签: sql postgresql decimal divide


    【解决方案1】:

    对于两行,这很容易。 如果你有一个很大的输入表,并且你想将第一行除以第二行,第三行除以第四行等等,那么你需要一个排序列来保存自己。

    因此,对于一个两行表(请记住,表从不排序),您只需要将较小的数字除以较大的数字即可。

    这里是:

    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】:

      表中不存在行“1”或“2”之类的东西。表格代表 无序 集合,因此如果没有指定顺序的列,则没有第一行或第二行。

      您可以使用聚合来除以最小值除以最大值:

      select min(count) * 1.0 / max(count)
      from t;
      

      注意* 1.0。 Postgres 做整数除法,所以你想转换成带小数点的东西。

      【讨论】:

        猜你喜欢
        • 2022-08-18
        • 1970-01-01
        • 2013-04-08
        • 2017-06-18
        • 1970-01-01
        • 2022-09-29
        • 2021-09-11
        • 1970-01-01
        • 2021-11-04
        相关资源
        最近更新 更多