Как можно разделить два счетных столбца? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть следующий код:

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?

Ответы [ 3 ]

1 голос
/ 05 августа 2020

Есть полезная вещь с именем 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.

1 голос
/ 06 августа 2020

Есть довольно много способов. Вот еще два. Использование 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);
0 голосов
/ 05 августа 2020

Просто разделите два значения с помощью оператора /.

Я также умножаю на 1.0, чтобы переопределить целочисленное деление.

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