Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Candidat au titre de 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 : 12
    Points
    12

    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 :
    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 :
    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    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 : 13 713
    Points : 22 847
    Points
    22 847

    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 :
    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Candidat au titre de 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 : 12
    Points
    12

    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 :
    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 Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 713
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 50
    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 : 13 713
    Points : 22 847
    Points
    22 847

    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 :
    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 de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « 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
    Candidat au titre de 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 : 12
    Points
    12

    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •