如何划分两个计数列?

How can divide two counted columns?

我有以下代码:

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 中执行此操作?

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

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

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

有一个名为 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 查询中的类型转换。

有很多方法。这里还有两个。
使用 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);