Tôi đã hỏi một câu hỏi ở đây: /programming/43807566/how-to-divide-two-values-from-the-same-column-but-at-different-rows
về việc chia các giá trị từ cùng một bảng, tại cùng một cột nhưng trên các hàng khác nhau. Bây giờ tôi có vấn đề là tôi có nhiều tử số và mẫu số hơn (với khác nhau uns
). Vẫn là self join
một cách tốt để giải quyết vấn đề này với Postgres hoặc có giải pháp nào tốt hơn?
Thí dụ:
| postcode | value | uns |
|----------|-------|-----|
| AA | 40 | 53 |
| BB | 20 | 53 |
| AA | 10 | 54 |
| AA | 20 | 55 |
| AA | 10 | 56 |
| AA | 30 | 57 |
| AA | 50 | 58 |
| BB | 10 | 54 |
| BB | 10 | 55 |
| BB | 70 | 56 |
| BB | 80 | 57 |
| BB | 10 | 58 |
Kết quả sẽ là:
| postcode | formula |
|----------|------------|
| AA | 18.888... |
| BB | 14.375 |
Trong đó giá trị được nhóm theo mã bưu điện và công thức là (giá trị với uns):
(V53 * V56 + V54 * V57 + V55 * V58) / (V56 + V57 + V58)
Chú ý để tránh phân chia cuối cùng bằng không. Công thức có thể thậm chí phức tạp hơn nhưng đó là một ví dụ tốt.
uns
trở thành tên cột - từ đó, bất kỳ công thức nào sử dụng các giá trị sẽ trở nên khả thi. Công thức sẽ được mã hóa cứng, hoặc có nguồn gốc động bằng cách nào đó?