PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да получите броя на INNER присъединяването и броя на броя на всички елементи?

Ако направите двете си заявки Union Compatible, тогава можете да комбинирате резултатите и да обобщите с допълнителна заявка:

    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

С 0 AS "total_accounts" и 0 AS "churned_accounts" означава, че двете заявки имат едни и същи налични полета, което прави UNION възможно.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. заключете редовете до следващия избор на postgres

  2. postgreSQL - in vs any

  3. Как да изпълнявам заявки при връзка с DB в Rails?

  4. Как да видите коя версия на Postgres работи

  5. Google Cloud SQL PG11:не можа да преоразмери споделения сегмент от паметта