PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać liczbę dołączeń INNER i liczbę wszystkich pozycji?

Jeśli dokonasz dwóch zapytań zgodnych z Unią, możesz połączyć wyniki i zagregować je za pomocą dodatkowego zapytania:

    SELECT payer, 
           sum(churned_accounts) AS "churned_count",
           sum(total_accounts) AS "total_count" 
    FROM (
      SELECT CAST(payor_id AS CHAR(50)) AS "payer", 
             count(*) as "churned accounts", 
             0 AS "total accounts" 
      FROM paid_users_no_more 
      INNER JOIN paid_users 
        ON paid_users_no_more.user_id=paid_users.user_id 
      WHERE paid_users.payment_start_date NOT BETWEEN '2015-08-01 00:00:00'::timestamp AND '2015-08-30 23:59:59'::timestamp 
      AND paid_users_no_more.payment_stop_date BETWEEN '2015-08-01 00:00:00'::timestamp AND '2015-08-30 23:59:59'::timestamp 
      GROUP BY paid_users.payor_id

      UNION

      SELECT CAST(paid_users.payor_email AS CHAR(50)) AS "payer", 
             0 AS "churned accounts", 
             count(*) AS "total accounts" 
      FROM paid_users 
      WHERE paid_users.payment_start_date NOT BETWEEN '2015-08-01 00:00:00'::timestamp AND '2015-08-30 23:59:59'::timestamp 
      GROUP BY paid_users.payor_email
    ) as All_Accounts

Posiadanie 0 AS "total_accounts" i 0 AS "churned_accounts" oznacza, że ​​oba zapytania mają te same pola, co powoduje, że UNION możliwe.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Metoda uwierzytelniania PostgreSQL 10 nie jest obsługiwana

  2. Kontener Spring Docker nie może uzyskać dostępu do kontenera Postgres Docker

  3. Rails 4 session.id od czasu do czasu zero

  4. Opóźnienie lub oczekiwanie na wyciąg

  5. x to procedura, użyj połączenia, gdy już używam połączenia