Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2008, 09h37   #1
Membre confirmé
 
Homme Alain
Inscription : mars 2004
Messages : 249
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 43
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 249
Points : 216
Points : 216
Par défaut Echantillonnage de table

Bonjour,

Je cherche à obtenir un échantillon d'un table.
Par exemple, imaginons un table "machin" contenant au moins 3 colonnes :
"Couleur", "Forme", "Taille", cette table contenant plusieurs milliers de lignes.

j'aimerais obtenir une requête qui m'en renvoi seulement une 30aine de lignes contenant toute les couleurs, formes et tailles présentes dans la table.

Je précise : il ne s'agit pas d'obtenir la lise des couleurs , formes et tailles existantes, mais d'avoir un sous ensemble 'représentatif' de la table.

PS:
Je tourne sous Oracle 10g
Alain B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 11h42   #2
Scorpi0
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Bonjour,

Code :
1
2
3
SELECT DISTINCT Couleur
FROM machin
WHERE rownum < 30
Et si tu veux tout sur une même colonne, tu unionnes :

Code :
1
2
3
4
5
6
7
SELECT DISTINCT Couleur
FROM machin
WHERE rownum < 30
union
SELECT DISTINCT Forme
FROM machin
WHERE rownum < 30
  Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 13h32   #3
Membre confirmé
 
Homme Alain
Inscription : mars 2004
Messages : 249
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 43
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 249
Points : 216
Points : 216
Citation:
Envoyé par Alain B. Voir le message
Je précise : il ne s'agit pas d'obtenir la lise des couleurs , formes et tailles existantes, mais d'avoir un sous ensemble 'représentatif' de la table.
Je voulais dire sous ensemble des lignes, pas des colonnes.

Au final je souhaite un résultat similaire à
mais avec un nombre restreint de ligne.

Imaginons :
Code :
SELECT * FROM machin WHERE rownum < 30
Ca correspondrait presque à ce que je cherche.
Mais il faut que dans ces 30 lignes il y ait chacune des couleurs, tailles et formes.
Alain B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 14h14   #4
Membre chevronné
 
Avatar de 13thFloor
 
Homme
DBA Oracle freelance
Inscription : janvier 2005
Messages : 558
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : France

Informations professionnelles :
Activité : DBA Oracle freelance

Informations forums :
Inscription : janvier 2005
Messages : 558
Points : 718
Points : 718
select ... from ... sample(pourcentage);
=> ramènera un pourcentage (<100) des lignes de la table.
13thFloor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 14h17   #5
Scorpi0
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
Un petit exemple nous aideraient.

Mais si j'ai compris, tu veux avoir un ensemble de ligne avec des valeurs sur certain colonnes suffisamment distinctes pour te donner une idée de son contenu.

Au final, ça serait un truc ressemblant aux stats d'oracle quoi... Je pense pas que ce soit possible avec une simple requête SQL. Peut être en bidouillant un truc ignoble, mais sinon...
  Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 15h15   #6
Membre confirmé
 
Homme Alain
Inscription : mars 2004
Messages : 249
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 43
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 249
Points : 216
Points : 216
Citation:
Envoyé par 13thFloor Voir le message
select ... from ... sample(pourcentage);
=> ramènera un pourcentage (<100) des lignes de la table.
et le "sample" il est représentatif ? ou il y a un risque (avec beaucoup de malchances) de me retrouver avec uniquement des "machins ronds jaunes de tailles 2" même si la table contenait aussi des "carrés verts de taille 4" ?


Citation:
Envoyé par Scorpi0 Voir le message
Un petit exemple nous aideraient.

Mais si j'ai compris, tu veux avoir un ensemble de ligne avec des valeurs sur certain colonnes suffisamment distinctes pour te donner une idée de son contenu.

Au final, ça serait un truc ressemblant aux stats d'oracle quoi... Je pense pas que ce soit possible avec une simple requête SQL. Peut être en bidouillant un truc ignoble, mais sinon...
Ca y ressemble oui, sauf que je n'ai pas besoin de respecter les proportions. Il me faut juste que chaque valeur des colonnes y soient présentes.
Alain B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 16h07   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par Alain B. Voir le message
...
j'aimerais obtenir une requête qui m'en renvoi seulement une 30aine de lignes contenant toute les couleurs, formes et tailles présentes dans la table.

...
Et ce n’est pas un Select distinct que tu cherches ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 16h52   #8
Membre confirmé
 
Homme Alain
Inscription : mars 2004
Messages : 249
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 43
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 249
Points : 216
Points : 216
Citation:
Envoyé par mnitu Voir le message
Et ce n’est pas un Select distinct que tu cherches ?
non, je cherche un echantillon contant toutes les valeurs, pas la liste des valeurs
Alain B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 17h24   #9
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 320
Points : 5 839
Points : 5 839
Citation:
Envoyé par Alain B. Voir le message
non, je cherche un echantillon contant toutes les valeurs, pas la liste des valeurs
Peux tu poster un petit jeux d’essaie avec les résultats attendues ?
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 17h35   #10
Scorpi0
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
A la va vite, pour un seul critère (les couleurs) et supposant qu'un Id unique existe :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT * 
FROM machin
WHERE myId IN
(
  /* On trouve une liste d'identifiant qui correspond chacun à une couleur */
  SELECT DISTINCT first_value(myId ) over(partition BY Couleur ORDER BY myId)
  FROM machin a
  WHERE Couleur IN
  (
    /* On ne prend que les 5 premieres couleurs */
    SELECT Couleur FROM
    (
      /* Repertoriation des différentes couleurs */
      SELECT DISTINCT Couleur
      FROM machin
    )
    WHERE rownum < 5
  )
)
Pour plusieurs critères, faire un Union avec d'autres requêtes dans le même genre.
  Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2008, 18h00   #11
Membre confirmé
 
Homme Alain
Inscription : mars 2004
Messages : 249
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 43
Localisation : France

Informations forums :
Inscription : mars 2004
Messages : 249
Points : 216
Points : 216
Va me falloir quelques heures pour décortiquer ça et l'appliquer à mon cas.
Mais ça semble correspondre.

Merci beaucoup
Alain B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h25.


 
 
 
 
Partenaires

Hébergement Web