2013-12-16 17 views
10

Giả sử tôi có một bảng trong Postgres gọi listings trông như thế này:Tạo một bảng pivot với PostgreSQL

id neighborhood bedrooms price 
1  downtown  0   256888 
2  downtown  1   334000 
3  riverview  1   505000 
etc. 

Làm thế nào để viết một truy vấn crosstab cho thấy mức giá trung bình cho mỗi phòng ngủ như các cột và vùng lân cận như các hàng?

Kết quả của truy vấn nên giống như thế này (con số này được tạo thành, cột là phòng ngủ):

  0  1  2  3 
riverton 250000 300000 350000 - 
downtown 189000 325000 -  450000 

Trả lời

17

Đầu tiên tính toán trung bình với hàm tổng hợp avg():

SELECT neighborhood, bedrooms, avg(price) 
FROM listings 
GROUP BY 1,2 
ORDER BY 1,2 

Sau đó, cung cấp kết quả cho hàm crosstab() như được hướng dẫn chi tiết trong câu trả lời liên quan này:

+0

Cảm ơn. GROUP BY 1,2 có ý nghĩa gì ở đây? – Avishai

+4

@Avishai: (Đầy đủ chức năng) viết tắt cú pháp với tham chiếu vị trí, viết tắt của 'GROUP BY lân cận, phòng ngủ' –

Các vấn đề liên quan