sql >> Database teknologi >  >> RDS >> PostgreSQL

Træk to forespørgsler fra samme tabel

SELECT b.name, a.*, a.sum2 - a.sum3 AS diff
FROM  (
    SELECT id
         , sum(CASE WHEN value_type = 2 THEN value::int END) AS sum2
         , sum(CASE WHEN value_type = 3 THEN value::int END) AS sum3
    FROM   data
    WHERE  id = 1
    AND    value_type IN (2, 3)
    AND    dayhour >= '2015-12-12 0:0'::timestamp
    AND    dayhour <  '2015-12-13 0:0'::timestamp
    GROUP  BY 1
    ) a
JOIN   device b USING (id);
  • Forudsat dayhour er af datatypen tidsstempel (information mangler). Castet til dato ville deaktivere grundlæggende indekser. Det er derfor, jeg transformerede det til en sargable prædikat. Flere detaljer:
  • Hvorfor castet value::int ?
  • Samle først, og tilslut derefter enheden. Billigere.



  1. Blanding af gammel mysql med PDO

  2. Flere begrænsninger i tabel:Hvordan får man alle overtrædelser?

  3. SQL Flere kolonner i IN-klausul for at konvertere til JPA

  4. VB.NET MySQL-forbindelse