Je fais un calcul de probabilité. J'ai une requête pour calculer le nombre total de fois qu'un événement se produit. À partir de ces événements, je souhaite connaître le nombre de fois qu'un sous-événement se produit. La requête pour obtenir le total des événements est de 25 lignes et je ne veux pas simplement copier + coller deux fois.SQL - Utiliser les résultats d'une requête comme base pour deux autres requêtes dans une instruction
Je veux faire deux choses à cette requête: calculer le nombre de lignes en elle, et calculer le nombre de lignes dans le résultat d'une requête sur cette requête. À l'heure actuelle, la seule façon de le faire est de remplacer (@ total @ par la requête compliquée pour obtenir toutes les lignes, et @ conditions @ par les conditions moins compliquées que les lignes, de @ total @, doivent avoir pour correspondre le sous-événement):
SELECT (SELECT COUNT(*) FROM (@[email protected]) AS t1 WHERE @[email protected]) AS suboccurs,
COUNT(*) AS totaloccurs FROM (@[email protected]) as t2
Comme vous le constatez, @ total @ est répété deux fois. Y at-il un moyen de contourner cela? Y a-t-il une meilleure façon de faire ce que j'essaie de faire? Pour souligner à nouveau: @ conditions @ dépend de ce que @ total @ renvoie (il fait des choses comme t1.foo = bar
).
Quelques notes finales: @ total @ par lui-même prend ~ 250ms. Cette requête plus compliquée prend ~ 300ms, donc postgres fait probablement une certaine optimisation, elle-même. Pourtant, la requête semble terriblement laide avec @ total @ littéralement collé deux fois.
génial! Cela fonctionne en fait environ 10-20ms plus lentement, drôlement ... mais j'étais plus préoccupé par la façon dont le code avait l'air, aussi, juste un montage mineur que j'ai dû faire. – Claudiu