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

Requêtes MySQL Discussion :

Deux requetes en une seule


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut Deux requetes en une seule
    Bonjour,

    je m'explique:

    Mes données sont organisées comme cela:
    Sequence-Charge-Modification-Intensite-Replicat-Fraction-Analyse
    Seq1-2-modif1-2.5-1-1-A
    Seq1-2-modif1-3.5-1-2-A
    Seq1-2-modif1-2.5-1-3-A
    Seq1-2-modif1-0-2-1-A
    Seq1-2-modif1-22.5-2-2-A
    Seq1-2-modif1-12.5-2-3-A
    Seq1-2-modif1-7-3-1-A
    Seq1-2-modif1-5-3-2-A
    Seq1-2-modif1-5.9-3-3-A
    Seq1-2-modif1-29.5-1-1-B
    Seq1-2-modif1-12.5-1-2-B
    Seq1-2-modif1-22.5-1-3-B
    Seq1-2-modif1-2.9-2-1-B
    Seq1-2-modif1-7.4-2-2-B
    Seq1-2-modif1-3.5-2-3-B
    Seq1-2-modif1-0-3-1-B
    Seq1-2-modif1-1.2-3-2-B
    Seq1-2-modif1-7.7-3-3-B

    Au début j'avais ça, comme résultat à afficher :
    ################################################################
    Sequence-Charge-Modification-Intensite_A-Intensite_B- Replicat
    Seq1-2-modif1-8.5-64.5-1
    Seq1-2-modif1-42-13.8-2
    Seq1-2-modif1-17.9-8.9-3
    ################################################################
    donc la requête que j'avais fait c'est cella:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    SELECT Sequence,
    		Charge,
    		Modification,
    		Replicat,
    	SUM(
    		CASE
    			WHEN Analyse = 'A' THEN Intensite
    			ELSE 0
    		END
    	) AS Intensite_A,
    	SUM(
    		CASE
    			WHEN Analyse = 'B' THEN Intensite
    			ELSE 0
    		END
    	) AS Intensite_B,
    	URL
    FROM Peptide
    GROUP BY Sequence, Charge, Modification, Replicat
    maintenant je dois afficher les intensités normalisée:
    #########################################################################################
    Sequence-Charge-Intensite_A- Intensite_A_norm-Intensite_B-Intensite_B_norm- Replicat
    Seq1-2-modif1-8.5- -64.5- -1
    Seq1-2-modif1-42- -13.8-- 2
    Seq1-2-modif1-17.9- -8.9- -3
    ##########################################################################################
    où dans chaque replicat:
    Intensite_A_norm = Intensite_A /somme_A
    Intensite_B_norm = Intensite_B / somme_B

    pour calculer la somme des intensités dans chaque replicat et dans chaque analyse, je fait cette requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SELECT   
    		SUM(
    			CASE
    				WHEN Analyse = 'A'
    				THEN Aire
    				ELSE 0
    			END ) AS som_A , 
    			SUM(
    			CASE
    				WHEN Analyse = 'B'
    				THEN Aire
    				ELSE 0
    			END ) AS som_B
    	FROM Peptide
    GROUP BY Replicat
    Mon problème est que je ne sais pas comment faire pour inclure cette seconde requête dans la première et ainsi calculer les les intensité normalisée

    merci d'avance

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    C'étaient mes requêtes ça non ?

    Dans la première, je constate quand même qu'il manque URL dans le GROUP BY.

    Comme, si je ne me trompe, la seconde requête ne donne qu'une seule ligne de résultat, tu dois pouvoir, sans conséquence sur le calcul, faire un CROSS JOIN entre les deux requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SELECT t1.Sequence, t1.Charge, t1.Modification, t1.Replicat, t1.URL,
    	t1.Intensite_A,
    	t1.Intensite_A / t2.som_A AS Intensite_A_norm,
    	t1.Intensite_B,
    	t1.Intensite_B / t2.som_B AS Intensite_B_norm
    FROM
    (
    	SELECT Sequence,
    			Charge,
    			Modification,
    			Replicat,
    		SUM(
    			CASE
    				WHEN Analyse = 'A' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_A,
    		SUM(
    			CASE
    				WHEN Analyse = 'B' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_B,
    		URL
    	FROM Peptide
    	GROUP BY Sequence, Charge, Modification, Replicat, URL
    ) t1
    CROSS JOIN
    (
    	SELECT
    			SUM(
    				CASE
    					WHEN Analyse = 'A'
    					THEN Aire
    					ELSE 0
    				END ) AS som_A ,
    				SUM(
    				CASE
    					WHEN Analyse = 'B'
    					THEN Aire
    					ELSE 0
    				END ) AS som_B
    		FROM Peptide
    	GROUP BY Replicat
    ) t2
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    C'étaient mes requêtes ça non ?

    Dans la première, je constate quand même qu'il manque URL dans le GROUP BY.

    Comme, si je ne me trompe, la seconde requête ne donne qu'une seule ligne de résultat, tu dois pouvoir, sans conséquence sur le calcul, faire un CROSS JOIN entre les deux requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SELECT t1.Sequence, t1.Charge, t1.Modification, t1.Replicat, t1.URL,
    	t1.Intensite_A,
    	t1.Intensite_A / t2.som_A AS Intensite_A_norm,
    	t1.Intensite_B,
    	t1.Intensite_B / t2.som_B AS Intensite_B_norm
    FROM
    (
    	SELECT Sequence,
    			Charge,
    			Modification,
    			Replicat,
    		SUM(
    			CASE
    				WHEN Analyse = 'A' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_A,
    		SUM(
    			CASE
    				WHEN Analyse = 'B' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_B,
    		URL
    	FROM Peptide
    	GROUP BY Sequence, Charge, Modification, Replicat, URL
    ) t1
    CROSS JOIN
    (
    	SELECT
    			SUM(
    				CASE
    					WHEN Analyse = 'A'
    					THEN Aire
    					ELSE 0
    				END ) AS som_A ,
    				SUM(
    				CASE
    					WHEN Analyse = 'B'
    					THEN Aire
    					ELSE 0
    				END ) AS som_B
    		FROM Peptide
    	GROUP BY Replicat
    ) t2

    Oui tout à fait, c'est les tiennes

    En fait non, la seconde requete donne trois lignes de resultat, car c'est selon le nombre de replicat, et dans ce cas j'ai trois replicats, donc elle me donne la somme dans chaque replicat.
    Et donc chaque sequence je dois la divisé par la somme de replicat où elle appartient

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Effectivement, je n'avais pas fais attention au GROUP BY replicat

    En ce cas, peut-être qu'une jointure interne sur le réplicat fera l'affaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SELECT t1.Sequence, t1.Charge, t1.Modification, t1.Replicat, t1.URL,
    	t1.Intensite_A,
    	t1.Intensite_A / t2.som_A AS Intensite_A_norm,
    	t1.Intensite_B,
    	t1.Intensite_B / t2.som_B AS Intensite_B_norm
    FROM
    (
    	SELECT Sequence,
    			Charge,
    			Modification,
    			Replicat,
    		SUM(
    			CASE
    				WHEN Analyse = 'A' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_A,
    		SUM(
    			CASE
    				WHEN Analyse = 'B' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_B,
    		URL
    	FROM Peptide
    	GROUP BY Sequence, Charge, Modification, Replicat, URL
    ) t1
    INNER JOIN
    (
    	SELECT	Replicat,
    			SUM(
    				CASE
    					WHEN Analyse = 'A'
    					THEN Aire
    					ELSE 0
    				END ) AS som_A ,
    				SUM(
    				CASE
    					WHEN Analyse = 'B'
    					THEN Aire
    					ELSE 0
    				END ) AS som_B
    		FROM Peptide
    	GROUP BY Replicat
    ) t2 ON t2.Replicat = t1.Replicat
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Services à domicile

    Informations forums :
    Inscription : Janvier 2012
    Messages : 57
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Effectivement, je n'avais pas fais attention au GROUP BY replicat

    En ce cas, peut-être qu'une jointure interne sur le réplicat fera l'affaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SELECT t1.Sequence, t1.Charge, t1.Modification, t1.Replicat, t1.URL,
    	t1.Intensite_A,
    	t1.Intensite_A / t2.som_A AS Intensite_A_norm,
    	t1.Intensite_B,
    	t1.Intensite_B / t2.som_B AS Intensite_B_norm
    FROM
    (
    	SELECT Sequence,
    			Charge,
    			Modification,
    			Replicat,
    		SUM(
    			CASE
    				WHEN Analyse = 'A' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_A,
    		SUM(
    			CASE
    				WHEN Analyse = 'B' THEN Intensite
    				ELSE 0
    			END
    		) AS Intensite_B,
    		URL
    	FROM Peptide
    	GROUP BY Sequence, Charge, Modification, Replicat, URL
    ) t1
    INNER JOIN
    (
    	SELECT	Replicat,
    			SUM(
    				CASE
    					WHEN Analyse = 'A'
    					THEN Aire
    					ELSE 0
    				END ) AS som_A ,
    				SUM(
    				CASE
    					WHEN Analyse = 'B'
    					THEN Aire
    					ELSE 0
    				END ) AS som_B
    		FROM Peptide
    	GROUP BY Replicat
    ) t2 ON t2.Replicat = t1.Replicat

    OK!
    Merci pour ton aide

Discussions similaires

  1. regrouper deux requetes en une seule
    Par philuser dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2009, 20h18
  2. [MySQL] Deux requetes en une seule
    Par ravat dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/06/2007, 18h02
  3. Deux requetes en une seule ?
    Par sunshine33 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/01/2007, 12h02
  4. integrer deux requetes dans une seule requete access
    Par laurent.w dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/12/2006, 15h11

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