J'essaie d'obtenir le prix minimum (prix total) à partir d'une colonne groupée (sku), puis d'obtenir les données fournisseur correspondantes (fournisseur) associées au prix le plus bas résultant.
Exemple de tableau
$query = "SELECT sku, supplier, MIN(totalprice) FROM pricetable GROUP BY sku";
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_array($result)) {
echo "The cheapest ". $row['sku']. " is £" .$row['MIN(totalprice)']." from ".$row['supplier'];
J'essaie de regrouper la colonne sku et d'obtenir le prix le plus bas et le fournisseur associé,
sku supplier totalprice 505 Sup1 20 505 Sup2 30 505 Sup3 25 605 Sup1 100 605 Sup2 97 605 Sup3 111
Par exemple,
le groupe 505 a le prix le plus bas de 20 du fournisseur Sup1
le groupe 606 a le prix le plus bas de 97 du fournisseur Sup2
Le code ci-dessus me donne le prix le plus bas pour chaque groupe sku, mais je ne peux pas obtenir le nom du fournisseur associé.
3 Réponses :
Vous pouvez essayer ci-dessous - en utilisant la sous-requête corrélée
SELECT sku, supplier, totalprice FROM pricetable t1
where totalprice in
(select MIN(totalprice) from pricetable t2 where t1.sku=t2.sku GROUP BY t2.sku)
Je pense que votre solution est meilleure que la mienne. Cela fonctionne dans [l'ancien maintenant] MySQL 5.x. Vote positif.
Salut, merci j'ai essayé mais cela ne me donne que le prix le plus bas pour le sku 505, rien pour le prochain sku 605, j'ai gardé ma (boucle while) je suppose que je n'ai pas besoin de changer cela?
Dans MySQL 8.x, vous pouvez faire:
select * from pricetable where rank() over(partition by sku order by totalprice) = 1
Une autre façon courante de procéder consiste à créer une table dérivée avec le sku et le prix total minimum par sku et à la rejoindre à nouveau à votre ensemble de données de base.
SELECT PT.sku, PT.supplier, PT.totalprice
FROM pricetable PT
INNER JOIN (SELECT min(totalprice) MTP, SKU
FROM pricetable
GROUP BY sku) B
on PT.SKU = B.SKU
and PT.MTP = PT.totalprice
Double possible de Obtenir des enregistrements avec une valeur maximale pour chaque groupe de résultats SQL groupés