Trong Postgres 9.4 trở lên, hãy sử dụng FILTER
tổng hợp lựa chọn. Điển hình là sạch nhất và nhanh nhất:
SELECT category
, count(*) FILTER (WHERE question1 = 0) AS zero
, count(*) FILTER (WHERE question1 = 1) AS one
, count(*) FILTER (WHERE question1 = 2) AS two
FROM reviews
GROUP BY 1;
Chi tiết cho FILTER
mệnh đề:
- Tổng hợp các cột với các bộ lọc bổ sung (riêng biệt)
Nếu bạn muốn nó ngắn :
SELECT category
, count(question1 = 0 OR NULL) AS zero
, count(question1 = 1 OR NULL) AS one
, count(question1 = 2 OR NULL) AS two
FROM reviews
GROUP BY 1;
Các biến thể cú pháp khác:
- Để có hiệu suất tuyệt đối, SUM nhanh hơn hay COUNT?
Truy vấn bảng chéo thích hợp
crosstab()
mang lại hiệu suất tốt nhất và ngắn hơn đối với danh sách dài các tùy chọn:
SELECT * FROM crosstab(
'SELECT category, question1, count(*) AS ct
FROM reviews
GROUP BY 1, 2
ORDER BY 1, 2'
, 'VALUES (0), (1), (2)'
) AS ct (category text, zero int, one int, two int);
Giải thích chi tiết:
- Truy vấn bảng chéo PostgreSQL