PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 13/01/2011 12:03:10

Mathias77
Membre

Ajouter une ligne total en fin de select

Bonjour !

Après de nombreuses heures de recherche sur les forums, je n'arrive toujours pas à faire ce que je veux faire : ajouter en fin de select une ligne total.

Voici ce que je veux faire :

Organisme     Nombre

AA                12
BB                26
YY                30
TOTAL          68

J'utilise deux selects reliés par un union mais le union me panache les deux selects et ordonne par ordre alphabétique, si bien que j'obtiens :

Organisme     Nombre

AA                12
BB                26
TOTAL           68
YY                 30

Comment faire ?????

Je joins mon code (simplifié) :

(
select Organisme.nomOrganisme,
       sum(NombreEmploye.nombre)
from NombreEmploye, Organisme
where NombreEmploye.idOrganisme=Organisme.idOrganisme
group by Organisme.nomOrganisme
)
union
(
select 'TOTAL' as TOTAL, sum(NombreEmploye.nombre)
from NombreEmploye
)
;

Merci pour votre aide !

Hors ligne

#2 13/01/2011 12:18:48

gleu
Administrateur

Re : Ajouter une ligne total en fin de select

SELECT
*
FROM (
(
 select Organisme.nomOrganisme,
   sum(NombreEmploye.nombre)
 from NombreEmploye, Organisme
 where NombreEmploye.idOrganisme=Organisme.idOrganisme
 group by Organisme.nomOrganisme
)
union
(
 select 'TOTAL' as TOTAL,
   sum(NombreEmploye.nombre)
 from NombreEmploye
)
) tmp
ORDER BY Organisme.nomOrganisme='total' asc, Organisme.nomOrganisme
;

Pas beau mais ça marche. Même si la présentation n'est pas vraiment le boulot du SGBD...


Guillaume.

Hors ligne

#3 13/01/2011 12:40:58

Mathias77
Membre

Re : Ajouter une ligne total en fin de select

Salut !

Merci pour ta réponse, mais ça ne marche pas...
J'ai cette erreur :
ERROR:  missing FROM-clause entry for table "Organisme"
LINE 21: ORDER BY Organisme.nomOrganisme='total' asc, Org...

Hors ligne

#4 13/01/2011 12:48:15

Mathias77
Membre

Re : Ajouter une ligne total en fin de select

Mais je viens de tenter autre chose :

SELECT
*
FROM (
(
 select Organisme.nomOrganisme,
   sum(NombreEmploye.nombre) AS Countt
 from NombreEmploye, Organisme
 where NombreEmploye.idOrganisme=Organisme.idOrganisme
 group by Organisme.nomOrganisme
)
union
(
 select 'TOTAL' as TOTAL,
   sum(NombreEmploye.nombre) AS Countt
 from NombreEmploye
)
) tmp
ORDER BY Countt
;

Et ça marche !
Et oui, le TOTAL est supérieur à tous les autres SUM, donc il est mis en dernier.

A+ et merci !

Hors ligne

#5 13/01/2011 12:56:43

gleu
Administrateur

Re : Ajouter une ligne total en fin de select

Ah oui, j'ai oublié le renommage de la table. Voici la requête corrigée :

SELECT
*
FROM (
(
 select Organisme.nomOrganisme,
   sum(NombreEmploye.nombre)
 from NombreEmploye, Organisme
 where NombreEmploye.idOrganisme=Organisme.idOrganisme
 group by Organisme.nomOrganisme
)
union
(
 select 'TOTAL' as TOTAL,
   sum(NombreEmploye.nombre)
 from NombreEmploye
)
) tmp
ORDER BY tmp.nomOrganisme='total' asc, tmp.nomOrganisme
;

Guillaume.

Hors ligne

#6 13/01/2011 13:00:16

Mathias77
Membre

Re : Ajouter une ligne total en fin de select

hum, non ça ne marche toujours pas, j'ai :
ERROR:  schema "tmp" does not exist

Hors ligne

#7 13/01/2011 13:08:27

gleu
Administrateur

Re : Ajouter une ligne total en fin de select

Ça marche sur le mien, en 9.0. Peut-être que vous utilisez une version différente ?


Guillaume.

Hors ligne

#8 13/01/2011 16:34:33

meles
Membre

Re : Ajouter une ligne total en fin de select

Bonjour, il me semble qu'avant la 9, il etait de bon ton de mettre le AS :

 SELECT
*
FROM (
(
 select Organisme.nomOrganisme,
   sum(NombreEmploye.nombre)
 from NombreEmploye, Organisme
 where NombreEmploye.idOrganisme=Organisme.idOrganisme
 group by Organisme.nomOrganisme
)
union
(
 select 'TOTAL' as TOTAL,
   sum(NombreEmploye.nombre)
 from NombreEmploye
)
) AS tmp
ORDER BY tmp.nomOrganisme='total' asc, tmp.nomOrganisme;

sinon, toujours dans le crado:

 SELECT
*
FROM (
(
 select Organisme.nomOrganisme,
   sum(NombreEmploye.nombre)
 from NombreEmploye, Organisme
 where NombreEmploye.idOrganisme=Organisme.idOrganisme
 group by Organisme.nomOrganisme
)
union
(
 select 'TOTAL' as TOTAL,
   sum(NombreEmploye.nombre)
 from NombreEmploye
)
) AS tmp
ORDER BY 2;

Cordialement

Hors ligne

#9 14/01/2011 12:14:23

Mathias77
Membre

Re : Ajouter une ligne total en fin de select

Salut !

Merci pour votre aide !

Le code utilisant AS ne marche pas, mais avec le "order by 2", ça marche.
Mais je me demande quelle est la signification de ce "order by 2" ?

A+

Hors ligne

#10 14/01/2011 13:04:54

arthurr
Membre

Re : Ajouter une ligne total en fin de select

2 : 2eme colonne retournée par le select

Exemple : select toto, titi, tata from foo order by 2 ==> va faire un order sur la colonne titi.

Dernière modification par arthurr (14/01/2011 13:09:46)

Hors ligne

#11 14/01/2011 13:05:34

gleu
Administrateur

Re : Ajouter une ligne total en fin de select

On demande d'ordonner par la colonne 2. On aurait pu aussi utiliser le nom de la deuxième colonne.


Guillaume.

Hors ligne

#12 14/01/2011 13:32:04

Mathias77
Membre

Re : Ajouter une ligne total en fin de select

ok merci à tous smile

Hors ligne

Pied de page des forums