Comment pui-je sélectionner les offres les moins chère pour chaque
article ?
Je dispose d'une table "produits" avec un identifiant "ProdNum" et une
table "articles" dans laquelle je stocke les offres de différents
fournisseurs. Je voudrais ne sélectionner que les offres les moins
chère et connaitre le fournisseur corespondant.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Seb Hastien
Dans son message précédent, bruno a écrit :
Comment pui-je sélectionner les offres les moins chère pour chaque article ?
Je dispose d'une table "produits" avec un identifiant "ProdNum" et une table "articles" dans laquelle je stocke les offres de différents fournisseurs. Je voudrais ne sélectionner que les offres les moins chère et connaitre le fournisseur corespondant.
Merci pour vos réponses. J'atteinds là les limites de mes capacités en SQL. Bruno
Bonjour,
Certains SGBD prévoient ce genre de fonctions mais au vu des messages précédents il semble que tu utilises MySQL. Tu peux essayer les requêtes suivantes pour répondre à ta question:
SELECT A.* FROM Articles A, (SELECT ProdNum,min(ArtPrix) as MinPrix FROM Articles GROUP BY ProdNum)) T WHERE A.ProdNum = T.ProdNum AND A.ArtPrix = T.MinPrix;
ou
SELECT A1.* FROM Articles A1 LEFT OUTER JOIN Articles A2 ON A1.ProdNum = A2.ProdNum AND A1.ArtPrix > A2.ArtPrix WHERE A2.ArtNum IS NULL;
Attention en MySQL 3 les sous-requêtes ne sont pas supportées et la méthode 1 devra être découpée en 2 avec création d'une table temporaire. Attention aussi aux doublons si tu as 2 fournisseurs qui proposent le même produit au même prix et que celui-ci est le prix minimum, les requêtes que je t'ai proposées sortiront 2 lignes pour ce produit.
-- Ceci est une signature automatique de MesNews. Site : http://www.mesnews.net
Dans son message précédent, bruno a écrit :
Comment pui-je sélectionner les offres les moins chère pour chaque
article ?
Je dispose d'une table "produits" avec un identifiant "ProdNum" et une
table "articles" dans laquelle je stocke les offres de différents
fournisseurs. Je voudrais ne sélectionner que les offres les moins
chère et connaitre le fournisseur corespondant.
Merci pour vos réponses. J'atteinds là les limites de mes capacités en
SQL.
Bruno
Bonjour,
Certains SGBD prévoient ce genre de fonctions mais au vu des messages
précédents il semble que tu utilises MySQL.
Tu peux essayer les requêtes suivantes pour répondre à ta question:
SELECT A.*
FROM
Articles A,
(SELECT ProdNum,min(ArtPrix) as MinPrix
FROM Articles
GROUP BY ProdNum)) T
WHERE
A.ProdNum = T.ProdNum AND
A.ArtPrix = T.MinPrix;
ou
SELECT A1.*
FROM
Articles A1
LEFT OUTER JOIN
Articles A2
ON A1.ProdNum = A2.ProdNum
AND A1.ArtPrix > A2.ArtPrix
WHERE A2.ArtNum IS NULL;
Attention en MySQL 3 les sous-requêtes ne sont pas supportées et la
méthode 1 devra être découpée en 2 avec création d'une table
temporaire.
Attention aussi aux doublons si tu as 2 fournisseurs qui proposent le
même produit au même prix et que celui-ci est le prix minimum, les
requêtes que je t'ai proposées sortiront 2 lignes pour ce produit.
--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Comment pui-je sélectionner les offres les moins chère pour chaque article ?
Je dispose d'une table "produits" avec un identifiant "ProdNum" et une table "articles" dans laquelle je stocke les offres de différents fournisseurs. Je voudrais ne sélectionner que les offres les moins chère et connaitre le fournisseur corespondant.
Merci pour vos réponses. J'atteinds là les limites de mes capacités en SQL. Bruno
Bonjour,
Certains SGBD prévoient ce genre de fonctions mais au vu des messages précédents il semble que tu utilises MySQL. Tu peux essayer les requêtes suivantes pour répondre à ta question:
SELECT A.* FROM Articles A, (SELECT ProdNum,min(ArtPrix) as MinPrix FROM Articles GROUP BY ProdNum)) T WHERE A.ProdNum = T.ProdNum AND A.ArtPrix = T.MinPrix;
ou
SELECT A1.* FROM Articles A1 LEFT OUTER JOIN Articles A2 ON A1.ProdNum = A2.ProdNum AND A1.ArtPrix > A2.ArtPrix WHERE A2.ArtNum IS NULL;
Attention en MySQL 3 les sous-requêtes ne sont pas supportées et la méthode 1 devra être découpée en 2 avec création d'une table temporaire. Attention aussi aux doublons si tu as 2 fournisseurs qui proposent le même produit au même prix et que celui-ci est le prix minimum, les requêtes que je t'ai proposées sortiront 2 lignes pour ce produit.
-- Ceci est une signature automatique de MesNews. Site : http://www.mesnews.net
Bruno
In article , Seb Hastien wrote:
Bonjour,
Certains SGBD prévoient ce genre de fonctions mais au vu des messages précédents il semble que tu utilises MySQL. Tu peux essayer les requêtes suivantes pour répondre à ta question:
SELECT A.* FROM Articles A, (SELECT ProdNum,min(ArtPrix) as MinPrix FROM Articles GROUP BY ProdNum)) T WHERE A.ProdNum = T.ProdNum AND A.ArtPrix = T.MinPrix;
Merci cela fonctionne. J'avais simplifié le cas de figure pour l'explication du problème, mais j'avais des jointures à ajouter, ce qui donne ceci :
SELECT A.* FROM Articles A, (SELECT AM.ProdNum,min(ArtPx) as MinPrix FROM Articles AM, produits as P, gammes as G WHERE AM.ProdNum=P.ProdNum AND P.GamNum=G.GamNum AND AM.ArtQte>GamQteCrit GROUP BY AM.ProdNum) T WHERE A.ProdNum=T.ProdNum AND A.ArtPx = T.MinPrix;
ou
SELECT A1.* FROM Articles A1 LEFT OUTER JOIN Articles A2 ON A1.ProdNum = A2.ProdNum AND A1.ArtPrix > A2.ArtPrix WHERE A2.ArtNum IS NULL;
Par contre avec les nouvelles jointures je n'arrive pas à ce que je veux avec ce second exemple. Tans pis je passe sur MYSQL 4
Attention en MySQL 3 les sous-requêtes ne sont pas supportées et la méthode 1 devra être découpée en 2 avec création d'une table temporaire. Attention aussi aux doublons si tu as 2 fournisseurs qui proposent le même produit au même prix et que celui-ci est le prix minimum, les requêtes que je t'ai proposées sortiront 2 lignes pour ce produit.
Pour l'instant, je ne vois pas comment éviter ces doublons.
In article <mn.ebf17d4af7ac9cc1.21322@hotmail.com>,
Seb Hastien <seb22fr@hotmail.com> wrote:
Bonjour,
Certains SGBD prévoient ce genre de fonctions mais au vu des messages
précédents il semble que tu utilises MySQL.
Tu peux essayer les requêtes suivantes pour répondre à ta question:
SELECT A.*
FROM
Articles A,
(SELECT ProdNum,min(ArtPrix) as MinPrix
FROM Articles
GROUP BY ProdNum)) T
WHERE
A.ProdNum = T.ProdNum AND
A.ArtPrix = T.MinPrix;
Merci
cela fonctionne.
J'avais simplifié le cas de figure pour l'explication du problème, mais
j'avais des jointures à ajouter, ce qui donne ceci :
SELECT A.* FROM Articles A, (SELECT AM.ProdNum,min(ArtPx) as MinPrix
FROM Articles AM, produits as P, gammes as G WHERE AM.ProdNum=P.ProdNum
AND P.GamNum=G.GamNum AND AM.ArtQte>GamQteCrit GROUP BY AM.ProdNum) T
WHERE A.ProdNum=T.ProdNum AND A.ArtPx = T.MinPrix;
ou
SELECT A1.*
FROM
Articles A1
LEFT OUTER JOIN
Articles A2
ON A1.ProdNum = A2.ProdNum
AND A1.ArtPrix > A2.ArtPrix
WHERE A2.ArtNum IS NULL;
Par contre avec les nouvelles jointures je n'arrive pas à ce que je veux
avec ce second exemple.
Tans pis je passe sur MYSQL 4
Attention en MySQL 3 les sous-requêtes ne sont pas supportées et la
méthode 1 devra être découpée en 2 avec création d'une table
temporaire.
Attention aussi aux doublons si tu as 2 fournisseurs qui proposent le
même produit au même prix et que celui-ci est le prix minimum, les
requêtes que je t'ai proposées sortiront 2 lignes pour ce produit.
Pour l'instant, je ne vois pas comment éviter ces doublons.
Certains SGBD prévoient ce genre de fonctions mais au vu des messages précédents il semble que tu utilises MySQL. Tu peux essayer les requêtes suivantes pour répondre à ta question:
SELECT A.* FROM Articles A, (SELECT ProdNum,min(ArtPrix) as MinPrix FROM Articles GROUP BY ProdNum)) T WHERE A.ProdNum = T.ProdNum AND A.ArtPrix = T.MinPrix;
Merci cela fonctionne. J'avais simplifié le cas de figure pour l'explication du problème, mais j'avais des jointures à ajouter, ce qui donne ceci :
SELECT A.* FROM Articles A, (SELECT AM.ProdNum,min(ArtPx) as MinPrix FROM Articles AM, produits as P, gammes as G WHERE AM.ProdNum=P.ProdNum AND P.GamNum=G.GamNum AND AM.ArtQte>GamQteCrit GROUP BY AM.ProdNum) T WHERE A.ProdNum=T.ProdNum AND A.ArtPx = T.MinPrix;
ou
SELECT A1.* FROM Articles A1 LEFT OUTER JOIN Articles A2 ON A1.ProdNum = A2.ProdNum AND A1.ArtPrix > A2.ArtPrix WHERE A2.ArtNum IS NULL;
Par contre avec les nouvelles jointures je n'arrive pas à ce que je veux avec ce second exemple. Tans pis je passe sur MYSQL 4
Attention en MySQL 3 les sous-requêtes ne sont pas supportées et la méthode 1 devra être découpée en 2 avec création d'une table temporaire. Attention aussi aux doublons si tu as 2 fournisseurs qui proposent le même produit au même prix et que celui-ci est le prix minimum, les requêtes que je t'ai proposées sortiront 2 lignes pour ce produit.
Pour l'instant, je ne vois pas comment éviter ces doublons.