Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 14/12/2012, 15h35   #1
hajarita
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 49
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 : 49
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
hajarita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 15h49   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 568
Points : 25 568
Envoyer un message via MSN à CinePhil
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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 15h55   #3
hajarita
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 49
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 : 49
Points : 12
Points : 12
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
hajarita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 16h42   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 568
Points : 25 568
Envoyer un message via MSN à CinePhil
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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2012, 17h24   #5
hajarita
Candidat au titre de Membre du Club
 
Femme
Étudiant
Inscription : janvier 2012
Messages : 49
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 : 49
Points : 12
Points : 12
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
hajarita est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h35.


 
 
 
 
Partenaires

Hébergement Web