PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Rút hai truy vấn từ cùng một bảng

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);
  • Giả sử dayhour thuộc loại dữ liệu dấu thời gian (thiếu thông tin). Truyền đến ngày sẽ vô hiệu hóa các chỉ mục cơ bản. Đó là lý do tại sao tôi đã chuyển đổi nó thành sargable Thuộc tính. Thông tin chi tiết:
  • Tại sao lại truyền value::int ?
  • Trước tiên hãy tổng hợp, sau đó kết hợp với thiết bị. Rẻ hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chọn / hiển thị id sê-ri được chèn lần cuối trong postgres

  2. Cặp giá trị khóa trong PostgreSQL

  3. Không thể kết nối với postgres bằng jdbc trong pyspark shell

  4. Tại sao tôi gặp lỗi không thể kết nối với máy chủ cho các postgres trong Mac OS Lion?

  5. Phạm vi của Rails cho IS NOT NULL và không trống / trống?