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

Tổng hợp các cột với các bộ lọc bổ sung (riêng biệt)

FILTER tổng hợp mệnh đề trong Postgres 9.4 hoặc mới hơn ngắn hơn và nhanh hơn:

SELECT u.name
     , count(*) FILTER (WHERE g.winner_id  > 0)    AS played
     , count(*) FILTER (WHERE g.winner_id  = u.id) AS won
     , count(*) FILTER (WHERE g.winner_id <> u.id) AS lost
FROM   games g
JOIN   users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP  BY u.name;
  • Hướng dẫn sử dụng
  • Postgres Wiki
  • Bài đăng trên blog của Depesz

Trong Postgres 9.3 (hoặc bất kỳ phiên bản) này vẫn ngắn hơn và nhanh hơn các lựa chọn con lồng nhau hoặc CASE biểu thức:

SELECT u.name
     , count(g.winner_id  > 0 OR NULL)    AS played
     , count(g.winner_id  = u.id OR NULL) AS won
     , count(g.winner_id <> u.id OR NULL) AS lost
FROM   games g
JOIN   users u ON u.id IN (g.player_1_id, g.player_2_id)
GROUP  BY u.name;

Chi tiết:

  • Để có hiệu suất tuyệt đối, SUM nhanh hơn hay COUNT?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. rake db:tạo cơ sở dữ liệu ném không tồn tại lỗi với postgresql

  2. Làm cách nào tôi có thể kiểm tra xem một cột tồn tại trong bảng bằng câu lệnh SQL

  3. Lưu trữ đầu ra của truy vấn đã chọn trong một mảng trong postgres

  4. Đặc quyền siêu người dùng mặc định của postgres bị xóa vô tình - tôi có thể lấy lại không?

  5. Làm thế nào để lấy một ngày trong năm từ một ngày trong PostgreSQL