PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Sustract dua query dari tabel yang sama

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);
  • Dengan asumsi dayhour adalah stempel waktu tipe data (informasi tidak ada). Pemeran hingga saat ini akan menonaktifkan indeks dasar. Itu sebabnya saya mengubahnya menjadi sargable predikat. Lebih detail:
  • Mengapa pemeran value::int ?
  • Agregat dulu, lalu gabungkan ke perangkat. Lebih murah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencadangan Database Postgresql Menggunakan Python

  2. Koordinat terbalik di kolom poligon PostgreSQL

  3. ECONNREFUSED untuk Postgres pada nodeJS dengan buruh pelabuhan

  4. Permintaan Rails SQL dengan % Wildcards berfungsi di SQLite tetapi tidak PostgreSQL?

  5. Bagaimana mencegah pengguna agar tidak dapat melihat database lain dan tabel dari database lain?