J'ai posé une question ici: /programming/43807566/how-to-divide-two-values-from-the-same-column-but-at-different-rows
sur la division des valeurs de la même table, dans la même colonne mais sur des lignes différentes. Maintenant, j'ai le problème où j'ai plus de numérateurs et de dénominateurs (avec différents uns
). Est-ce toujours le self join
bon moyen de résoudre ce problème avec Postgres ou existe-t-il de meilleures solutions?
Exemple:
| 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 |
Le résultat devrait être:
| postcode | formula |
|----------|------------|
| AA | 18.888... |
| BB | 14.375 |
Où les valeurs sont regroupées par code postal et la formule est (valeur avec uns):
(V53 * V56 + V54 * V57 + V55 * V58) / (V56 + V57 + V58)
Faire attention à éviter une éventuelle division par zéro. La formule peut être encore plus complexe mais c'est un bon exemple.
uns
noms de colonnes deviennent - à partir de là, quelle que soit la formule qui utilise les valeurs, elle devrait pouvoir fonctionner. La formule sera-t-elle codée en dur ou dérivée dynamiquement d'une manière ou d'une autre?