J'ai une table nommée Enchère
qui contient un AuctionID
. J'ai une autre table nommée bid
qui contient le AuctionID
(en tant que clé étrangère) et quel était le montant.
Ce que je veux faire, c'est lister le AuctionID
dans une colonne et le montant de l'enchère la plus élevée dans l'autre colonne.
J'ai essayé différentes façons de faire des jointures internes pour que cela s'affiche correctement, mais j'ai horriblement échoué. Veuillez garder à l'esprit que je suis un novice total en matière de MYSQL et que la solution pourrait très bien être que je devrais revenir en arrière et repenser toute la base de données.
Le plus proche que j'ai pour afficher ce que je veux est les deux méthodes ci-dessous.
La première
SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid;
La seconde est la suivante
SELECT auction.auctionsID, bid.bid from bid INNER JOIN auction on auction.auctionsID = bid.auctionsID where bid.bid = (select max(bid.bid) from bid);
Le premier affiche toutes les offres qui ont été faites et leur montant, mais je ne veux que l'enchère la plus élevée sur chaque auctionID
.
Le second n'affiche que l'absolu l'enchère la plus élevée jamais faite sur toutes les enchères différentes et quel AuctionID
avait cette enchère spécifique.
Je suppose que j'ai besoin d'une sorte d'énoncés de jointure imbriqués, mais je ne peux vraiment pas comprendre
Merci d'avance!
Edit: Quelle belle expérience. En tant qu'utilisateur de longue date qui, par désespoir, a créé un compte aujourd'hui pour poser ma première question. J'ai reçu une aide formidable de cette communauté.
La réponse:
SELECT auction.auctionID, bid.bid from bid INNER JOIN auction on auction.auctionsID = bid.auctionsID;
Fournie par Caius Jard et Deependra Bhandari
4 Réponses :
Regroupez le tableau des enchères avant de rejoindre
SELECT * FROM auction a INNER JOIN bid b ON a.auctionid = b.auctionid INNER JOIN (SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid) mb on a.auctionid = mb.auctionid and b.bid = mb.maxbid
Vous obtiendrez ainsi les détails de chaque enchère (y compris l'ID) et uniquement l'enchère maximale pour chaque enchère
Deependra a fait un bon point; vous avez dit que vous ne vouliez vraiment que l'enchère et l'enchère maximale et cette information peut être dérivée uniquement du tableau des enchères (la sous-requête aliasée comme b
dans mon code ci-dessus, donc si c'est vraiment tout ce dont vous avez besoin, supprimez ma requête jusqu'à la sous-requête. Si vous souhaitez plus tard toutes les autres informations sur une enchère, ainsi que son enchère maximale, utilisez la requête ci-dessus
Si vous voulez toutes les informations sur l'enchère et toutes les informations sur l'enchère max, pour chaque enchère, vous pouvez le faire ainsi:
SELECT * FROM auction a INNER JOIN (SELECT auctionid, MAX(bid) as maxbid FROM bid GROUP BY auctionid) b on a.auctionid = b.auctionid
Cela renverra toutes les informations sur une enchère et toutes les informations sur l'enchère maximale. J'espère que vous n'autorisez que des enchères uniques, sinon, nous allons entrer dans un scénario d'enchère maximale "le plus récent" plus compliqué
Merci! Cela aide beaucoup! Mais ce n'est pas exactement ce que je veux. cela affiche toutes les données contenues dans les deux tables. Je veux seulement afficher l'enchère.auctionID et bid.bid.
Consultez la note que j'ai faite à propos de "utilisez simplement la sous-requête", c'est-à-dire SELECT Auctionid, MAX (bid) as maxbid FROM bid GROUP BY Auctionid
si c'est tout ce que vous voulez - si vous voulez plus d'informations sur l'enchère ou l'enchère, voici comment vous pouvez la lier dans
Merci beaucoup! Cela fonctionne très bien! Et si facile! Hahaha. je me suis battu pendant deux jours à ce sujet. Que toi!
Pas de problème. si une réponse est utile, cliquez sur la flèche vers le haut au-dessus du nombre. Si vous pensez qu'une réponse particulière est la bonne réponse à votre problème, cliquez sur la case à cocher Marl. Une seule réponse peut être cochée comme réponse acceptée, mais de nombreuses réponses peuvent être votées à la hausse, si elles ajoutent quelque chose d'utile ou d'utile. Quand je demande, j'ai tendance à monter ET à cocher la «bonne» réponse, et les autres qui contenaient des faits supplémentaires utiles
Si vous n'avez besoin que de deux colonnes et que les deux sont disponibles dans le tableau des enchères, pourquoi vous créez une jointure. Utilisez le suivant.
CHOISISSEZ l'enchèreID, max (enchère) comme la facture la plus élevée de l'offre grouper par AuctionID;
Je pense que vous voulez juste une requête GROUP BY
:
SELECT a.auctionID, MAX(b.bid) AS max_bid FROM auction a INNER JOIN bid b ON a.auctionsID = b.auctionsID GROUP BY a.auctionID;
Cela suppose que vous souhaitiez trouver l'offre la plus élevée pour chaque enchère.
Si vous souhaitez retirer l ' enchère
de l'enchère ayant le montant le plus élevé pour une enchère donnée, utilisez un JOIN
avec une sous-requête corrélée:
SELECT a.auctionsID, b.bid FROM bid INNER JOIN auction a ON a.auctionsID = b.auctionsID AND b.amount = (SELECT MAX(amount) FROM bid WHERE bid = b.bid)
@ haag1 MySQL ne prend pas en charge
CROSS APPLY
, et même si c'était le cas, je ne suis pas sûr que vous souhaitiez l'utiliser ici.Variation intéressante dans les interprétations de cette question - clairement un bon exemple de la raison pour laquelle Strawberry a le MCVE Q sur la numérotation abrégée