Échantillonner les données d'une table en SQL

Fermé
Dfordanger Messages postés 7 Date d'inscription mardi 1 mars 2011 Statut Membre Dernière intervention 30 juin 2014 - 28 sept. 2011 à 10:21
blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 17 avril 2024 - 28 sept. 2011 à 13:13
Bonjour,

Contexte : Chaque champ de la table (tbl_produit) contient une caractéristique d'un produit listé dans la table.

La question à laquelle je souhaiterais répondre est "Quel est l'ensemble minimal de produits à sélectionner de manière à faire apparaître chaque caractéristique une fois au moins ?"

En gros, un ensemble d'entrées représentatif de chaque caractéristique disponible dans tbl_liste_caractéristique...

Je me demandais si cela était possible en SQL, ou s'il fallait utiliser un autre langage ?

Merci d'avance pour votre réponse !

D

2 réponses

blux Messages postés 25976 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 17 avril 2024 3 287
28 sept. 2011 à 13:13
Salut,

ton problème relève de la théorie des probabilités, bien plus que de l'algèbre relationnelle, à la base des base de données.

En fonction du nombre de produit différents et de la quantité de ces produits, tu auras une réponse différente.

Je m'explique :

dans ton tiroir, tu as 18 chaussettes, 9 noires et 9 bleues.

Si tu veux être sûr d'avoir au moins une paire identique et que tu es dans le noir, il faut prendre 10 chaussettes, même dans le cas le plus défavorable, tu en auras forcément au moins une qui sera complète.

Si tu as 3 couleurs de chaussettes, il te faut additionner le nombre total de chaussettes de 2 couleurs et ajouter 1. Pour 4 couleurs, additionner le total de 3 couleurs et ajouter 1.

Ca, c'est la théorie, dans la pratique SQL, ça sera plus dur :

- compter le nombre de caractéristiques uniques (SELECT UNIQUE ou DISTINCT...)
- compter le nombre d'articles par caractéristiques (SELECT COUNT... GROUP BY...)
- additionner les (n-1) résultats renvoyés précédemment : pas facile du tout, voire impossible en SQL
- lire un nombre d'enregistrement égal au résultat précédent +1 (SELECT TOP n en fonction du SQL utilisé).

Maintenant, selon le SGBD que tu utilises, ça peut se traiter en programmation.
1
Jean_Jacques Messages postés 1040 Date d'inscription mercredi 30 avril 2008 Statut Membre Dernière intervention 1 août 2014 112
28 sept. 2011 à 11:53
Bonjour Dfordanger, - 28 sept. 2011 à 11:50

Cette syntaxe de regroupement devrait vous dépanner.
- Chaque libellé distinct contenu dans "Champ_1" est listé une unique fois.
- Le Count est facultatif. Il permet de dénombrer le nombre d'occurrence pour chaque libellé.

SELECT <Table_1.Champ_1>, Count(<Table_1.Champ_1>) AS CompteDeChamp_1
FROM <Table_1>
GROUP BY <Table_1.Champ_1>
ORDER BY <Table_1.Champ_1>;

Cordialement
-1