Wolfram Language

Effectuez des sous-requêtes

L'utilisation de sous-requêtes pour poser des questions plus complexes sur les données est une technique très puissante en SQL. Cet exemple illustre à quel point il est facile de générer des sous-requêtes corrélées et non corrélées en imbriquant EntityFunction.

Enregistrez un exemple de base de données avec une structure de tableau complexe.

Supposons que l'on veuille examiner des produits qui se rapprochent du prix maximal du produit. On pourrait être tenté de regarder d'abord le prix maximal du produit en effectuant une agrégation pour ensuite utiliser le résultat dans une requête.

Le problème avec cette approche est que chaque fois que vous effectuez deux requêtes, un autre utilisateur de la base de données pourrait changer les prix des produits sans avertissement et vos résultats seraient compromis.

Une solution courante à ce problème est d'effectuer ces calculs de support en ligne pour qu'ils se produisent en une seule transaction.

La même expression apparaît maintenant dans le corps de l'expression EntityFunction, garantissant ainsi qu'elle sera évaluée par la base de données.

Un autre modèle courant, utilisé dans SQL, est ce que l'on appelle communément les sous-requêtes corrélées. En programmation fonctionnelle, cela équivaudrait à avoir des fonctions pures imbriquées dans lesquelles les fonctions intérieures dépendent des paramètres des fonctions extérieures. Réalisez un tel exemple étape par étape.

La question à laquelle vous essayez de répondre est la suivante : quels produits ont le plus de produits dans une fourchette de prix de 15 $ ? Tout d'abord, vous devez créer une expression FilteredEntityClass qui représente les produits dont le prix est inférieur ou égal au 15 $ de la valeur du price de référence.

Ensuite, vous devez les compter. Vous pouvez le faire en utilisant la propriété spéciale "EntityCount".

Vous pouvez maintenant l'ajouter en tant que nouvelle propriété à la classe de produits.

Puisque vous avez fixé la valeur du price, cette requête renvoie en fait la même valeur de 28 pour toutes les entités dans "products".

Si vous voulez qu'elle renvoie des valeurs différentes, la valeur du prix doit dépendre de l'EntityFunction externe.

Comme vous pouvez le constater, vous avez maintenant deux expressions EntityFunction imbriquées, et le corps de l'expression la plus proche contient les deux paramètres.

Vous pouvez vérifier que vous obtenez des résultats différents pour chaque produit.

Obtenez maintenant un résultat plus riche en utilisant cette propriété nouvellement créée pour trier les résultats.

Exemples connexes

de en es ja ko pt-br zh