Soit une vue qui genère une synthèse de chaque commande en fournissant les
champs suivants :
- commande_id
- client_id
- date_livraison
- soustotal_marchandise_horsremise_htva
- remise
- soustotal_marchandise_htva
- frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la
moyenne de la remise et le total des frais de port, pour chaque livraison.
S'il y a plusieurs commandes pour un même client le même jour, on considère
comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison,
client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même date
pour le même client...
Soit une vue qui genère une synthèse de chaque commande en fournissant les champs suivants : - commande_id - client_id - date_livraison - soustotal_marchandise_horsremise_htva - remise - soustotal_marchandise_htva - frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la moyenne de la remise et le total des frais de port, pour chaque livraison. S'il y a plusieurs commandes pour un même client le même jour, on considère comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même date pour le même client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
La colonne "date_livraison" ne serait-elle pas de type datetime avec la partie heure différente?
Philippe.
Utilisateur1 a demandé:
Bonjour
Soit une vue qui genère une synthèse de chaque commande en fournissant les
champs suivants :
- commande_id
- client_id
- date_livraison
- soustotal_marchandise_horsremise_htva
- remise
- soustotal_marchandise_htva
- frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la
moyenne de la remise et le total des frais de port, pour chaque livraison.
S'il y a plusieurs commandes pour un même client le même jour, on considère
comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison,
client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même date
pour le même client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
La colonne "date_livraison" ne serait-elle pas de type datetime avec la
partie heure différente?
Soit une vue qui genère une synthèse de chaque commande en fournissant les champs suivants : - commande_id - client_id - date_livraison - soustotal_marchandise_horsremise_htva - remise - soustotal_marchandise_htva - frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la moyenne de la remise et le total des frais de port, pour chaque livraison. S'il y a plusieurs commandes pour un même client le même jour, on considère comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même date pour le même client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
La colonne "date_livraison" ne serait-elle pas de type datetime avec la partie heure différente?
Philippe.
Utilisateur1
Bonjour
Merci de votre aide ! Mais le champ date_livraison est un champ de type "date" qui ne contient pas d'heures.
"Ph. B." a écrit dans le message de news: 48305443$0$28782$
Utilisateur1 a demandé:
Bonjour
Soit une vue qui genère une synthèse de chaque commande en fournissant les champs suivants : - commande_id - client_id - date_livraison - soustotal_marchandise_horsremise_htva - remise - soustotal_marchandise_htva - frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la moyenne de la remise et le total des frais de port, pour chaque livraison. S'il y a plusieurs commandes pour un même client le même jour, on considère comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même date pour le même client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
La colonne "date_livraison" ne serait-elle pas de type datetime avec la partie heure différente?
Philippe.
Bonjour
Merci de votre aide ! Mais le champ date_livraison est un champ de type
"date" qui ne contient pas d'heures.
"Ph. B." <philippe_N_O.S_P_A_M_.boucault@voila.fr> a écrit dans le message
de news: 48305443$0$28782$426a74cc@news.free.fr...
Utilisateur1 a demandé:
Bonjour
Soit une vue qui genère une synthèse de chaque commande en fournissant
les champs suivants :
- commande_id
- client_id
- date_livraison
- soustotal_marchandise_horsremise_htva
- remise
- soustotal_marchandise_htva
- frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la
moyenne de la remise et le total des frais de port, pour chaque
livraison.
S'il y a plusieurs commandes pour un même client le même jour, on
considère comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison,
client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même
date pour le même client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
La colonne "date_livraison" ne serait-elle pas de type datetime avec la
partie heure différente?
Merci de votre aide ! Mais le champ date_livraison est un champ de type "date" qui ne contient pas d'heures.
"Ph. B." a écrit dans le message de news: 48305443$0$28782$
Utilisateur1 a demandé:
Bonjour
Soit une vue qui genère une synthèse de chaque commande en fournissant les champs suivants : - commande_id - client_id - date_livraison - soustotal_marchandise_horsremise_htva - remise - soustotal_marchandise_htva - frais_de_port_htva
Je cherche à obtenir le total du sous-total htva des marchandises, la moyenne de la remise et le total des frais de port, pour chaque livraison. S'il y a plusieurs commandes pour un même client le même jour, on considère comme étant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Mais ca m'affiche quand même 2 livraisons pour deux commandes à la même date pour le même client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
La colonne "date_livraison" ne serait-elle pas de type datetime avec la partie heure différente?
Philippe.
Alain Montfranc
Utilisateur1 a écrit
Bonjour
Merci de votre aide ! Mais le champ date_livraison est un champ de type "date" qui ne contient pas d'heures.
Bizarre... J'avais la meme explication en tete.
Un select distinct date_livraison, client_id
A t'il le meme comportement ?
Utilisateur1 a écrit
Bonjour
Merci de votre aide ! Mais le champ date_livraison est un champ de type
"date" qui ne contient pas d'heures.
Merci de votre aide ! Mais le champ date_livraison est un champ de type "date" qui ne contient pas d'heures.
Bizarre... J'avais la meme explication en tete.
Un select distinct date_livraison, client_id
A t'il le meme comportement ?
didier gaumet
On Sun, 18 May 2008 17:13:51 +0200, Utilisateur1 wrote:
Bonjour
Soit une vue qui genre une synthse de chaque commande en fournissant les champs suivants : - commande_id - client_id - date_livraison - soustotal_marchandise_horsremise_htva - remise - soustotal_marchandise_htva - frais_de_port_htva
Je cherche obtenir le total du sous-total htva des marchandises, la moyenne de la remise et le total des frais de port, pour chaque livraison. S'il y a plusieurs commandes pour un mme client le mme jour, on considre comme tant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Mais ca m'affiche quand mme 2 livraisons pour deux commandes la mme date pour le mme client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
de mémoire parce que ça fait un bail que je n'ai écrit de SQL, il faudrait peut-être introduire en supplément une clause ORDER BY similaire à GROUP BY...
On Sun, 18 May 2008 17:13:51 +0200, Utilisateur1 wrote:
Bonjour
Soit une vue qui genre une synthse de chaque commande en fournissant les
champs suivants :
- commande_id
- client_id
- date_livraison
- soustotal_marchandise_horsremise_htva
- remise
- soustotal_marchandise_htva
- frais_de_port_htva
Je cherche obtenir le total du sous-total htva des marchandises, la
moyenne de la remise et le total des frais de port, pour chaque livraison.
S'il y a plusieurs commandes pour un mme client le mme jour, on considre
comme tant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison,
client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id;
Mais ca m'affiche quand mme 2 livraisons pour deux commandes la mme date
pour le mme client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
de mémoire parce que ça fait un bail que je n'ai écrit de SQL, il faudrait
peut-être introduire en supplément une clause ORDER BY similaire à GROUP BY...
On Sun, 18 May 2008 17:13:51 +0200, Utilisateur1 wrote:
Bonjour
Soit une vue qui genre une synthse de chaque commande en fournissant les champs suivants : - commande_id - client_id - date_livraison - soustotal_marchandise_horsremise_htva - remise - soustotal_marchandise_htva - frais_de_port_htva
Je cherche obtenir le total du sous-total htva des marchandises, la moyenne de la remise et le total des frais de port, pour chaque livraison. S'il y a plusieurs commandes pour un mme client le mme jour, on considre comme tant une seule livraison.
J'avai fait ceci sur postgres :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Mais ca m'affiche quand mme 2 livraisons pour deux commandes la mme date pour le mme client...
Ou est l'erreur dans ma logique ?
Merci d'avance !
Bonjour,
de mémoire parce que ça fait un bail que je n'ai écrit de SQL, il faudrait peut-être introduire en supplément une clause ORDER BY similaire à GROUP BY...
Utilisateur1
Bonjour
Voici un jeu de test pour mon probleme :
CREATE TEMPORARY TABLE vue_commande_synthese ( commande_id integer PRIMARY KEY NOT NULL, client_id INTEGER NOT NULL, date_livraison DATE, remise NUMERIC(5,2) NOT NULL, soustotal_marchandise_htva NUMERIC(9,2), frais_de_port_htva NUMERIC(9,2) );
Et voici ma requete qui ne fonctionne pas (retourne 2 livraisons au lieu de 1 pour le client 1005 au 12/05/2008)
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id ORDER BY date_livraison ASC;
Et voici ma requete qui ne fonctionne pas (retourne 2 livraisons au lieu de
1 pour le client 1005 au 12/05/2008)
SELECT date_livraison,
client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id
ORDER BY date_livraison ASC;
Et voici ma requete qui ne fonctionne pas (retourne 2 livraisons au lieu de 1 pour le client 1005 au 12/05/2008)
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id ORDER BY date_livraison ASC;
Sur fr.comp.applications.sgbd, Utilisateur1 disait :
Je ne comprend plus rien !
Moi non plus. Le résultat que vous donnez est tout à fait correct. Quelle réponse attendez-vous ?
-- http://ardus.matabio.net/cgi/liens
didier gaumet
Il faut comprendre le fonctionnement de la clause GROUP BY dans ta requête: elle ne regroupe pas tous les clients, elle regroupe tous les clients identiques qui se suivent dans l'ordre de lecture. Vu que tu spécifies un ORDER BY sur la date et non pas sur le couple date+client, le résultat est conforme à ta requête mais pas à tes attentes...
Il faut comprendre le fonctionnement de la clause GROUP BY dans ta
requête: elle ne regroupe pas tous les clients, elle regroupe tous les
clients identiques qui se suivent dans l'ordre de lecture. Vu que tu
spécifies un ORDER BY sur la date et non pas sur le couple date+client, le
résultat est conforme à ta requête mais pas à tes attentes...
Il faut comprendre le fonctionnement de la clause GROUP BY dans ta requête: elle ne regroupe pas tous les clients, elle regroupe tous les clients identiques qui se suivent dans l'ordre de lecture. Vu que tu spécifies un ORDER BY sur la date et non pas sur le couple date+client, le résultat est conforme à ta requête mais pas à tes attentes...
Jerome PAULIN
Utilisateur1 a écrit :
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Je ne sais pas si c'est valide sous postgres, mais j'aurai fait quelque chose du genre :
SELECT date_livraison||client_id as cle, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY 1
gg
Utilisateur1 a écrit :
SELECT date_livraison,
client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id;
Je ne sais pas si c'est valide sous postgres, mais j'aurai fait quelque
chose du genre :
SELECT date_livraison||client_id as cle,
COUNT(date_livraison) AS nombre_livraison,
SUM(soustotal_marchandise_htva) AS total_marchandises_htva,
AVG(remise) AS moyenne_remises,
SUM(frais_de_port_htva) AS total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY 1
SELECT date_livraison, client_id, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id;
Je ne sais pas si c'est valide sous postgres, mais j'aurai fait quelque chose du genre :
SELECT date_livraison||client_id as cle, COUNT(date_livraison) AS nombre_livraison, SUM(soustotal_marchandise_htva) AS total_marchandises_htva, AVG(remise) AS moyenne_remises, SUM(frais_de_port_htva) AS total_frais_de_port_htva FROM vue_commande_synthese GROUP BY 1
gg
Jogo
Sur fr.comp.applications.sgbd, didier gaumet disait :
Il faut comprendre le fonctionnement de la clause GROUP BY dans ta requête: elle ne regroupe pas tous les clients, elle regroupe tous les clients identiques qui se suivent dans l'ordre de lecture.
Non. Elle regroupe toutes les lignes qui ont toutes les colonnes spécifiées dans la clause GROUP BY identiques. L'ordre n'a aucune importance et est géré après le GROUP BY.
Bon, je crois avoir compris ce que désire le PO. Est-ce que la requête suivante donne le résultat escompté ?
SELECT client_id, COUNT(date_livraison) AS nombre_livraison, SUM(s_total_marchandises_htva) AS s_total_marchandises_htva, AVG(s_moyenne_remises) AS s_moyenne_remises, SUM(s_total_frais_de_port_htva) AS s_total_frais_de_port_htva FROM ( SELECT date_livraison, client_id, SUM(soustotal_marchandise_htva) AS s_total_marchandises_htva, AVG(remise) AS s_moyenne_remises, SUM(frais_de_port_htva) AS s_total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id ) as s GROUP BY client_id ;
Il est fort probable que cette requête puisse être améliorée.
-- Mes AAD réveillent les morts et redonnent les érections, l'amour, le retour de l'épouse, le travail et l'argent. -- Grand Mage Bonaventure Isaac Pochard dans fufe --
Sur fr.comp.applications.sgbd, didier gaumet disait :
Il faut comprendre le fonctionnement de la clause GROUP BY dans ta
requête: elle ne regroupe pas tous les clients, elle regroupe tous les
clients identiques qui se suivent dans l'ordre de lecture.
Non. Elle regroupe toutes les lignes qui ont toutes les colonnes
spécifiées dans la clause GROUP BY identiques. L'ordre n'a aucune
importance et est géré après le GROUP BY.
Bon, je crois avoir compris ce que désire le PO. Est-ce que la
requête suivante donne le résultat escompté ?
SELECT client_id,
COUNT(date_livraison) AS nombre_livraison,
SUM(s_total_marchandises_htva) AS s_total_marchandises_htva,
AVG(s_moyenne_remises) AS s_moyenne_remises,
SUM(s_total_frais_de_port_htva) AS s_total_frais_de_port_htva
FROM ( SELECT date_livraison,
client_id,
SUM(soustotal_marchandise_htva) AS s_total_marchandises_htva,
AVG(remise) AS s_moyenne_remises,
SUM(frais_de_port_htva) AS s_total_frais_de_port_htva
FROM vue_commande_synthese
GROUP BY date_livraison, client_id ) as s
GROUP BY client_id ;
Il est fort probable que cette requête puisse être améliorée.
--
Mes AAD réveillent les morts et redonnent les érections, l'amour,
le retour de l'épouse, le travail et l'argent.
-- Grand Mage Bonaventure Isaac Pochard dans fufe --
Sur fr.comp.applications.sgbd, didier gaumet disait :
Il faut comprendre le fonctionnement de la clause GROUP BY dans ta requête: elle ne regroupe pas tous les clients, elle regroupe tous les clients identiques qui se suivent dans l'ordre de lecture.
Non. Elle regroupe toutes les lignes qui ont toutes les colonnes spécifiées dans la clause GROUP BY identiques. L'ordre n'a aucune importance et est géré après le GROUP BY.
Bon, je crois avoir compris ce que désire le PO. Est-ce que la requête suivante donne le résultat escompté ?
SELECT client_id, COUNT(date_livraison) AS nombre_livraison, SUM(s_total_marchandises_htva) AS s_total_marchandises_htva, AVG(s_moyenne_remises) AS s_moyenne_remises, SUM(s_total_frais_de_port_htva) AS s_total_frais_de_port_htva FROM ( SELECT date_livraison, client_id, SUM(soustotal_marchandise_htva) AS s_total_marchandises_htva, AVG(remise) AS s_moyenne_remises, SUM(frais_de_port_htva) AS s_total_frais_de_port_htva FROM vue_commande_synthese GROUP BY date_livraison, client_id ) as s GROUP BY client_id ;
Il est fort probable que cette requête puisse être améliorée.
-- Mes AAD réveillent les morts et redonnent les érections, l'amour, le retour de l'épouse, le travail et l'argent. -- Grand Mage Bonaventure Isaac Pochard dans fufe --
didier gaumet
On Wed, 21 May 2008 09:29:08 +0200, Jogo wrote:
Non. Elle regroupe toutes les lignes qui ont toutes les colonnes spécifiées dans la clause GROUP BY identiques. L'ordre n'a aucune importance et est géré après le GROUP BY.
[...]
Tu as évidemment raison et vu ma grosse dernière douzaine d'années sans SQL, j'aurais mieux fait de m'abstenir ;-)
Désolé pour le bruit.
On Wed, 21 May 2008 09:29:08 +0200, Jogo wrote:
Non. Elle regroupe toutes les lignes qui ont toutes les colonnes
spécifiées dans la clause GROUP BY identiques. L'ordre n'a aucune
importance et est géré après le GROUP BY.
[...]
Tu as évidemment raison et vu ma grosse dernière douzaine d'années sans
SQL, j'aurais mieux fait de m'abstenir ;-)
Non. Elle regroupe toutes les lignes qui ont toutes les colonnes spécifiées dans la clause GROUP BY identiques. L'ordre n'a aucune importance et est géré après le GROUP BY.
[...]
Tu as évidemment raison et vu ma grosse dernière douzaine d'années sans SQL, j'aurais mieux fait de m'abstenir ;-)