Bonjour,
Je cherche à afficher, en regard de chaque membre, le cumul des
tantièmes. J'utilise la requête suivante:
SELECT
nom, tantiemes, sum(tantiemes) AS Cumul
FROM membres
WHERE id_category = 1
ORDER BY nom
;
La requête s'arrête au 1er membre de l'association, ce qui n'est pas
vraiment le but cherché ...
Mais ce serait _encore mieux_ d'obtenir la présentation ci-dessous !
Nom Tantièmes
Avion 12345
...
...
...
Zoo 54321
TOTAL 100000
Merci d'avance !
Quand tu utilise SUM() c'est que tu veux le total.
Donc ça te donne une seule ligne, avec le total de tout, et du coup ça
prend la première ligne du résultat pour les autres colonnes.
Si tu veux un total *par membre*, il faut utiliser une clause GROUP BY:
SELECT
nom, tantiemes, sum(tantiemes) AS Cumul
FROM membres
WHERE id_category = 1
GROUP BY id
ORDER BY nom;
Si tu veux le total par membre ET le total total il faut faire deux
requêtes qui se rejoignent avec une union :
SELECT
nom AS nom,
tantiemes AS 'Tantièmes',
SUM(tantiemes) AS 'Cumul tantièmes'
FROM membres
WHERE id_category = 1
GROUP BY id
ORDER BY nom
UNION ALL
SELECT 'Total', NULL, SUM(tantiemes)
FROM membres
WHERE id_category = 1;
Chacune des 2 requêtes (avant et après le UNION ALL) fonctionne effectivement,
mais les 2 ensemble donnent: "ORDER BY clause should come after UNION ALL not
before".
Moi je sèche, et je ne suis pas le seul ...
Merci de ta persévérence.
On 05/08/2022 02:50, "BohwaZ/Garradin" <bohwaz@garradin.eu> wrote:
> Quand tu utilise SUM() c'est que tu veux le total.
>
> Donc ça te donne une seule ligne, avec le total de tout, et du coup ça
> prend la première ligne du résultat pour les autres colonnes.
>
> Si tu veux un total *par membre*, il faut utiliser une clause GROUP BY:
>
> SELECT
> nom, tantiemes, sum(tantiemes) AS Cumul
> FROM membres
> WHERE id_category = 1
> GROUP BY id
> ORDER BY nom;
>
> Si tu veux le total par membre ET le total total il faut faire deux
> requêtes qui se rejoignent avec une union :
>
> SELECT
> nom AS nom,
> tantiemes AS 'Tantièmes',
> SUM(tantiemes) AS 'Cumul tantièmes'
> FROM membres
> WHERE id_category = 1
> GROUP BY id
> ORDER BY nom
>
> UNION ALL
>
> SELECT 'Total', NULL, SUM(tantiemes)
> FROM membres
> WHERE id_category = 1;
>
>
> Chacune des 2 requêtes (avant et après le UNION ALL) fonctionne
> effectivement, mais les 2 ensemble donnent: "ORDER BY clause should
> come after UNION ALL not before". Moi je sèche, et je ne suis pas le
> seul ... Merci de ta persévérence.
Comme le dit le message : il faut déplacer le ORDER BY à la fin.
SELECT
nom AS nom,
tantiemes AS 'Tantièmes',
SUM(tantiemes) AS 'Cumul tantièmes'
FROM membres
WHERE id_category = 1
GROUP BY id
UNION ALL
SELECT 'Total' AS nom, NULL, SUM(tantiemes)
FROM membres
WHERE id_category = 1
ORDER BY nom = 'Total', nom;
On 05/08/2022 13:59, "BohwaZ/Garradin" <bohwaz@garradin.eu> wrote:
> > Chacune des 2 requêtes (avant et après le UNION ALL) fonctionne
> > effectivement, mais les 2 ensemble donnent: "ORDER BY clause should
> > come after UNION ALL not before". Moi je sèche, et je ne suis pas
le
> > seul ... Merci de ta persévérence.
>
> Comme le dit le message : il faut déplacer le ORDER BY à la fin.
>
> SELECT
> nom AS nom,
> tantiemes AS 'Tantièmes',
> SUM(tantiemes) AS 'Cumul tantièmes'
> FROM membres
> WHERE id_category = 1
> GROUP BY id
>
> UNION ALL
>
> SELECT 'Total' AS nom, NULL, SUM(tantiemes)
> FROM membres
> WHERE id_category = 1
> ORDER BY nom = 'Total', nom;
>
>
Merci BohwaZ,
Malheureusement, cette requête génère le message: "1st ORDER BY term does not
match any column in the result set"
Ecrite avec mes pieds (heureusement il n'y a que 29 membres ...), la requête
suivante positionne les TOTAUX en dernière ligne et présente les membres dans
l'ordre alphabétique.
(reste le pb du 81 que je n'arrive pas à afficher en 81.00):
SELECT
nom AS Nom,
tantiemes AS 'Tantièmes',
round(191600.*tantiemes/1000000.)/100. AS BP_perso,
round((150000.)*tantiemes/1000000.)/100. AS GrosTravaux_perso,
round((191600.)*tantiemes/1000000.)/100. + round((150000.)*tantiemes/1000000.)/100. AS
TOTAL_perso
FROM membres
WHERE id_category = 1
GROUP BY nom
UNION ALL
SELECT 'TOTAUX' AS nom,
SUM(tantiemes),
SUM(round(191600.*tantiemes/1000000.)/100.),
SUM(round((150000.)*tantiemes/1000000.)/100.),
SUM(round((191600.)*tantiemes/1000000.)/100. + round((150000.)*tantiemes/1000000.)/100.)
FROM membres
;
Cordialement
Alors met juste :
ORDER BY nom;
Mais je ne peux pas écrire tes requêtes à ta place non plus ;)
J'ai vu. Tu as bien raison ;)
On 06/08/2022 22:22, "BohwaZ/Garradin" <bohwaz@garradin.eu> wrote:
> Alors met juste :
>
> ORDER BY nom;
>
> Mais je ne peux pas écrire tes requêtes à ta place non plus ;)
>
>