IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Stats de formules chimiques


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 21
    Points
    21
    Par défaut Stats de formules chimiques
    Bonjour,

    j'ai un problème pour extraire des statistiques sur des formules chimiques.

    J'ai 2 tables dans ma base : une qui contient tout l'entête de la formule (numéro de formule, date de création, personne qui l'a créée, forme (liquide, pommade, ...), ...) et la 2e qui contient les composants avec leurs quantités :

    entête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    num  forme      date
    1    pommade    2018-01-05
    2    pommade    2018-01-06
    3    liquide    2018-02-04
    détail de la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    num  produit       qte  unité
    1    composant1    1    g
    1    composant4    0.8  g
    1    composant5    2    g
    2    composant1    1    g
    2    composant4    0.8  g
    2    composant5    2    g
    2    composant8    1    g
    3    composant5    4    g
    3    composant8    2    g
    mon problème est de pouvoir avoir que les formules qui contiennent uniquement par exemple les composants : composant1 et composant4 et composant5 et composant8.

    Dans mon exemple, une seule formule correspond aux critères de recherche : la numéro 2.

    Je ne trouve pas la requête qui me permettrait de sortir le nombre de formules selon sa composition.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 286
    Points : 12 991
    Points
    12 991
    Par défaut
    Bonjour,
    Un truc du genre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select f.idformule
    from formule f
    inner join form_comp as fc  on fc.idformule = f.idformule
    where fc.id in (...) // Ici les Ids des composants
    group by f.idformule
    having count(*) = ... // Ici le nombre de composant
    Il suffit de construire dynamiquement la requête, en passant la liste des Id des composants et leur nombre.

    Tatayo.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Il ne faut pas mettre le where ici, sinon vous aurez toutes les formules qui contiennent au moins ces 4 composants et non pas exactement.
    Je suppose que le couple (num, produit) est unique dans la table form_comp.
    Quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      select num
        from form_comp
    group by num
      having 4 = sum(case when produit in ('Composant 1', 'Composant 4', 'Composant 5', 'Composant 8') then 1 else 0 end)
         and 0 = sum(case when produit in ('Composant 1', 'Composant 4', 'Composant 5', 'Composant 8') then 0 else 1 end);

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Je viens de tester la solution de Waldar et je crois que c'est exactement ce qu'il me fallait. Je ferai d'autres tests demain pour valider cette merveille

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Numération formule chimique + équation physique différentes
    Par Ni_Dieux_Ni_Maitre dans le forum Mathématiques - Sciences
    Réponses: 1
    Dernier message: 11/08/2011, 18h21
  2. [A-07]entrer une formule chimique dans un formulaire
    Par basalte dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/03/2009, 10h27
  3. Outils pour formule chimique
    Par Ravens dans le forum Editeurs / Outils
    Réponses: 13
    Dernier message: 20/11/2008, 21h51
  4. Comment entrer des formules chimiques dans les champs access
    Par Monbasinstinct dans le forum Access
    Réponses: 18
    Dernier message: 06/04/2006, 18h39
  5. [reseaux] Comment creer un compte user à partir d'un formul avec perl
    Par oulai_evado dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 01/10/2002, 20h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo