【问题标题】:How can divide two counted columns?如何划分两个计数列?
【发布时间】:2020-08-05 19:07:41
【问题描述】:

我有以下代码:

SELECT  (
        SELECT COUNT(distinct user_id)
        FROM   re_read
        ) AS re_user_id,
        
        (
        SELECT COUNT(distinct user_id)
        FROM   first_read
        ) AS first_user_id;

结果是:

re_user_id | first_user_id
--------------------------
     66231 |        210023    

但我想将这两个值相除,得到 re_user_id / first_user_id = 0,31535。

我应该如何在 PostgreSQL 中做到这一点?

【问题讨论】:

    标签: postgresql select divide


    【解决方案1】:

    有一个有用的东西叫CTE

    使用它:

    with t as (
        SELECT  (
                SELECT COUNT(distinct user_id)
                FROM   re_read
                )::numeric AS re_user_id,
                (
                SELECT COUNT(distinct user_id)
                FROM   first_read
                )::numeric AS first_user_id)
    select re_user_id, first_user_id, re_user_id / first_user_id as division from t;
    

    注意 CTE 查询中的类型转换。

    【讨论】:

      【解决方案2】:

      有很多方法。这里还有两个。
      使用values 和演员表:

      select x, y, x/y ratio from 
      (
       values
       (
        (SELECT COUNT(distinct user_id) FROM re_read)::numeric,
        (SELECT COUNT(distinct user_id) FROM first_read)::numeric
       )
      ) t(x,y);
      

      或嵌套select 和演员:

      select x, y, x/y ratio from 
      (
       select
        (SELECT COUNT(distinct user_id) FROM re_read)::numeric,
        (SELECT COUNT(distinct user_id) FROM first_read)::numeric
      ) t(x,y);
      

      【讨论】:

        【解决方案3】:

        只需用/ 运算符将两个值相除即可。

        我还乘以1.0 来覆盖整数除法。

        SELECT  1.0 * (
                SELECT COUNT(distinct user_id)
                FROM   re_read
                ) 
                /
                (
                SELECT COUNT(distinct user_id)
                FROM   first_read
                ) AS ratio
        

        【讨论】:

        • 我试过用同样的方法除法,但出现语法错误:ERROR: syntax error at or near "/" Position: 112 / ^ 1 statement failed.
        • @ZoltánDomokos 对不起。我在表达式中留下了as re_user_id。它现在在我的回答中得到修复。
        猜你喜欢
        • 2020-01-20
        • 2013-08-14
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多