sql >> Databasteknik >  >> RDS >> PostgreSQL

Subtrahera två frågor från samma tabell

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);
  • Anta dayhour är av datatyp tidsstämpel (information saknas). Casten hittills skulle inaktivera grundläggande index. Det var därför jag förvandlade den till en sargable predikat. Mer information:
  • Varför casten value::int ?
  • Aggregera först och anslut sedan till enheten. Billigare.



  1. Snabba upp plpgsql som räknar dokumenttyper i en loop?

  2. php include-felet hittar inte sökvägen

  3. Kör Vitess och MySQL med ClusterControl

  4. Hur kan jag starta och kontrollera min MySQL-logg?