sql >> Database >  >> RDS >> PostgreSQL

Hoe het aantal INNER-join en het aantal items van alle items te tellen?

Als u uw twee zoekopdrachten Union Compatible maakt, kunt u de resultaten combineren en aggregeren met een extra zoekopdracht:

    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

Het hebben van de 0 AS "total_accounts" en 0 AS "churned_accounts" betekent dat de twee zoekopdrachten dezelfde velden hebben, waardoor de UNION mogelijk.




  1. MySQL kapt aaneengeschakeld resultaat van een GROUP_CONCAT-functie af

  2. OpenQuery van SQL Server naar Oracle-server loopt voor onbepaalde tijd vast als de verbinding wordt verbroken

  3. Hoe Tomcat te configureren om verbinding te maken met MySQL

  4. Een beetje nieuwsgierig naar het `mysql -e` uitvoerformaat met &zonder omleiding