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 :

Somme par groupe


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut Somme par groupe
    Bonjour je veux faire une requête à partir de cette table :

    Sequence-Charge-Modification-Intensité-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

    Afin d’avoir un résultat comme ceci :


    Sequence-Charge-Intensité dans A- Intensité dans 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
    Ou « Intensité dans A « sera la somme des intensité de toutes les Fraction par repliact dans l’analyse A et pour l’analyse B pareil

    Merci d’avance

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    C'est une somme par groupage sur la colonne Fraction a priori.
    Qu'as-tu essayé comme requête ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    C'est une somme par groupage sur la colonne Fraction a priori.
    Qu'as-tu essayé comme requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    SELECT a.`Sequence` AS `Sequence` , a.`Charge` AS `Charge`, a.`Modification` AS `Modification`, SUM(Aire) AS 'Intensite A',  SUM(Aire) AS 'Intensite B'
    FROM Peptide a
    INNER JOIN Peptide b ON a.SeqPeptide = b.SeqPeptide AND a.`Charge` = b.`Charge` AND a.`Modification` = b.`Modification` AND a.NumReplicat =  b.NumReplicat
    AND b.NomAnalyse = '$NomAnalyse_A'
    WHERE a.NomAnalyse = '$NomAnalyse_B'
    ORDER BY NumReplicat
    J'ai essayé cela mais ca ne marche pas

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Voici ta requête remise en forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT a.`Sequence` AS `Sequence` ,
    	a.`Charge` AS `Charge`,
    	a.`Modification` AS `Modification`,
    	SUM(Aire) AS 'Intensite A',
    	SUM(Aire) AS 'Intensite B'
    FROM Peptide a
    INNER JOIN Peptide b
    	ON a.SeqPeptide = b.SeqPeptide
    	AND a.`Charge` = b.`Charge`
    	AND a.`Modification` = b.`Modification`
    	AND a.NumReplicat =  b.NumReplicat
    	AND b.NomAnalyse = '$NomAnalyse_A'
    WHERE a.NomAnalyse = '$NomAnalyse_B'
    ORDER BY NumReplicat
    1) Les 3 premiers alias 'Sequence', 'Charge' et 'Modification' sont inutiles puisque tu renommes ces colonnes avec le même nom !

    2) Tu fais deux fois la même somme avec deux alias différents.
    D'ailleurs, je ne sais pas comment le SGBD choisit entre les deux colonnes des deux instances de la table puisque tu n'as pas mis l'alias de la table en préfixe à la colonne aire dans ces sommes.
    Au fait, cette colonne "aire" ne figurait pas dans ton premier message. Est-ce en fait la colonne que tu nommais "Intensite" ?

    3) Tu as un mélange de colonnes et d'opérations de groupage (SUM) dans le SELECT et pas de GROUP BY. Ça ne peut pas fonctionner.

    4) Tes colonnes étant correctement nommées, supprime ces saloperies d'apostrophes inversées inutiles !

    5)
    ca ne marche pas
    L'option boule de cristal étant désactivée sur DVP, merci d'expliquer ce qui "ne marche pas". Quels symptômes ?

    6) Je pense que tu n'as pas besoin d'auto-jointure en utilisant CASE dans la somme.
    Essaie comme ça :
    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
    SELECT Sequence,
    	Charge,
    	Modification,
    	NumReplicat,
    	SUM(
    		CASE
    			WHEN NomAnalyse = 'A' THEN Aire
    			ELSE 0
    		END
    	) AS Intensite_A,
    	SUM(
    		CASE
    			WHEN NomAnalyse = 'B' THEN Aire
    			ELSE 0
    		END
    	) AS Intensite_B
    FROM Peptide
    GROUP BY Sequence, Charge, Modification, NumReplicat
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Voici ta requête remise en forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT a.`Sequence` AS `Sequence` ,
    	a.`Charge` AS `Charge`,
    	a.`Modification` AS `Modification`,
    	SUM(Aire) AS 'Intensite A',
    	SUM(Aire) AS 'Intensite B'
    FROM Peptide a
    INNER JOIN Peptide b
    	ON a.SeqPeptide = b.SeqPeptide
    	AND a.`Charge` = b.`Charge`
    	AND a.`Modification` = b.`Modification`
    	AND a.NumReplicat =  b.NumReplicat
    	AND b.NomAnalyse = '$NomAnalyse_A'
    WHERE a.NomAnalyse = '$NomAnalyse_B'
    ORDER BY NumReplicat


    1) Les 3 premiers alias 'Sequence', 'Charge' et 'Modification' sont inutiles puisque tu renommes ces colonnes avec le même nom !

    2) Tu fais deux fois la même somme avec deux alias différents.
    D'ailleurs, je ne sais pas comment le SGBD choisit entre les deux colonnes des deux instances de la table puisque tu n'as pas mis l'alias de la table en préfixe à la colonne aire dans ces sommes.
    Au fait, cette colonne "aire" ne figurait pas dans ton premier message. Est-ce en fait la colonne que tu nommais "Intensite" ?

    3) Tu as un mélange de colonnes et d'opérations de groupage (SUM) dans le SELECT et pas de GROUP BY. Ça ne peut pas fonctionner.

    4) Tes colonnes étant correctement nommées, supprime ces saloperies d'apostrophes inversées inutiles !

    5)

    L'option boule de cristal étant désactivée sur DVP, merci d'expliquer ce qui "ne marche pas". Quels symptômes ?

    6) Je pense que tu n'as pas besoin d'auto-jointure en utilisant CASE dans la somme.
    Essaie comme ça :
    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
    SELECT Sequence,
    	Charge,
    	Modification,
    	NumReplicat,
    	SUM(
    		CASE
    			WHEN NomAnalyse = 'A' THEN Aire
    			ELSE 0
    		END
    	) AS Intensite_A,
    	SUM(
    		CASE
    			WHEN NomAnalyse = 'B' THEN Aire
    			ELSE 0
    		END
    	) AS Intensite_B
    FROM Peptide
    GROUP BY Sequence, Charge, Modification, NumReplicat

    Oui tout a fait Aire c'est l'Intensité,j'ai essayé ta requete ca marche

    Et ,stp, si je veux qu'il m'affiche le resultat comme ceci :
    Sequence-Charge-Intensité dans A- Intensité dans B
    Seq1-2-modif1-8.5-64.5
    Seq2-3-modif2-42-13.8
    Seq3-1-modif3-17.9-8.9

    ou l'intensité dans A est La moyenne des intensité des 3 replicat(dont l'intensité est la somme de l'intensité des fractions)


    Car à la fain je dois calculer le ratio qui est "intensité dans A"/ "intensité dans B"/

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par hajarita Voir le message
    Et ,stp, si je veux qu'il m'affiche le resultat comme ceci :
    Sequence-Charge-Intensité dans A- Intensité dans B
    Seq1-2-modif1-8.5-64.5
    Seq2-3-modif2-42-13.8
    Seq3-1-modif3-17.9-8.9

    ou l'intensité dans A est La moyenne des intensité des 3 replicat(dont l'intensité est la somme de l'intensité des fractions)


    Car à la fin je dois calculer le ratio qui est "intensité dans A"/ "intensité dans B"/
    Attention à la pertinence des résultats !
    Le ratio d'une moyenne, c'est bizarre !

    De même, pour le moment, tu as la somme par Sequence, Charge, Modification, NumReplicat. Ce que tu demandes maintenant semble être la moyenne par Sequence, Charge, Modification.
    C'est ça ?
    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
    SELECT Sequence,
    	Charge,
    	Modification,
    	AVG(
    		CASE
    			WHEN NomAnalyse = 'A' THEN Aire
    		END
    	) AS Intensite_A,
    	AVG(
    		CASE
    			WHEN NomAnalyse = 'B' THEN Aire
    		END
    	) AS Intensite_B
    FROM Peptide
    GROUP BY Sequence, Charge, Modification
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  7. #7
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Attention à la pertinence des résultats !
    Le ratio d'une moyenne, c'est bizarre !

    De même, pour le moment, tu as la somme par Sequence, Charge, Modification, NumReplicat. Ce que tu demandes maintenant semble être la moyenne par Sequence, Charge, Modification.
    C'est ça ?
    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
    SELECT Sequence,
    	Charge,
    	Modification,
    	AVG(
    		CASE
    			WHEN NomAnalyse = 'A' THEN Aire
    		END
    	) AS Intensite_A,
    	AVG(
    		CASE
    			WHEN NomAnalyse = 'B' THEN Aire
    		END
    	) AS Intensite_B
    FROM Peptide
    GROUP BY Sequence, Charge, Modification


    Non, en fait, C'est pas la moyenne des Aire pour chaque sequence, je t'explique:
    pour cette exemple :

    Sequence_Charge_Modification-Intensité-NumReplicat-NumFraction-NomAnalyse
    Seq1-2-modif1-3-1-1-A
    Seq1-2-modif1-4-1-2-A
    Seq1-2-modif1-0-1-3-A
    Seq1-2-modif1-1-2-1-A
    Seq1-2-modif1-2-2-2-A
    Seq1-2-modif1-5-2-3-A
    Seq1-2-modif1-1-3-1-A
    Seq1-2-modif1-0-3-2-A

    mon intensité de la seq1 dans Analyse A est :

    Intensité = ((3+4+0)+(0+1+2)+(5+1+0))/3
    Intensité = Moyenne des intensité des Replicat, et chaque intensité de replicat et la somme des intensité des fraction

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Autrement dit c'est la somme par répliquat divisé par le nombre de répliquats.

    Comme ceci alors peut-être ?
    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
    SELECT Sequence,
    	Charge,
    	Modification,
    	AVG(Intensite_A) AS moyenne_A,
    	AVG(Intensite_B) AS moyenne_B
    FROM
    (
    	SELECT Sequence,
    		Charge,
    		Modification,
    		NumReplicat,
    		SUM(
    			CASE
    				WHEN NomAnalyse = 'A' THEN Aire
    				ELSE 0
    			END
    		) AS Intensite_A,
    		SUM(
    			CASE
    				WHEN NomAnalyse = 'B' THEN Aire
    				ELSE 0
    			END
    		) AS Intensite_B
    	FROM Peptide
    	GROUP BY Sequence, Charge, Modification, NumReplicat
    ) tmp
    GROUP BY Sequence, Charge, Modification
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

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

Discussions similaires

  1. [CR 8] Somme par groupe
    Par Louzemac dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 23/02/2015, 14h04
  2. [État] Somme par groupe
    Par Norin dans le forum IHM
    Réponses: 5
    Dernier message: 08/08/2006, 19h11
  3. Réponses: 7
    Dernier message: 23/09/2005, 20h58
  4. Trier les fichiers par type et les afficher par groupe ...
    Par KneXtasY dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 18/09/2005, 18h50
  5. concaténer par GROUP BY des champs text/varchar
    Par Fredobdx dans le forum Requêtes
    Réponses: 1
    Dernier message: 12/07/2005, 13h44

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