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

Извадете две заявки от една и съща таблица

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);
  • Приемайки dayhour е от тип данни timestamp (липсва информация). Преобразуването до момента би деактивирало основните индекси. Ето защо го трансформирах в sargable предикат. Повече подробности:
  • Защо cast value::int ?
  • Първо обединете, след това се присъединете към устройството. По-евтино.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Добавете седмици към дата в PostgreSQL

  2. Как да филтрирате колона с масив на PostgreSQL с API за JPA критерии?

  3. Разбиране на прехвърлянето от bytea към oid

  4. Импортиране на файлове от PostgreSQL в R

  5. как да използвате \timing в postgres