2 votes

Comment puis-je sélectionner le prix minimum par article dans ma base de données ?

Je veux sélectionner le prix minimum par article dans ma base de données MySQL, mais je ne sais pas comment écrire la requête.

Voici un exemple de tableau.

  id |  price | quantity
    1|   $200 |      200
    2|  $1000 |       10
    3|     $5 |        1

Dans ce cas, le prix/article pour l'id 1 serait de 1 $ (200/200), pour l'id 2 de 100 $ (1000/10), pour l'id 3 de 5 $ (5/1) et la requête renverrait 1 $, car c'est le prix/article minimum.

Alors comment le traduire en SQL ? J'y ai pensé :

SELECT MIN(price)/200 WHERE quantity=200

mais cela ne fonctionne qu'avec une quantité codée en dur et je dois écrire la quantité pour chaque id, ce qui serait impossible avec plus de 1000 prix et quantités différents. J'aurais donc besoin de quelque chose de flexible, avec des variables ou autre, par exemple :

SELECT MIN(price)/quantity

mais ce n'est pas une syntaxe correcte. (ou bien cela ne fonctionne pas pour moi)

Quelle est la manière correcte de l'écrire dans MySQL ?

4voto

Gordon Linoff Points 213350

Je pense que cela fait ce que vous voulez :

select min(price / quantity)
from t;

Si vous voulez toutes les informations dans la ligne, utilisez alors order by y limit :

select t.*, (price / quantity) as unit_price
from t
order by unit_price asc
limit 1;

0voto

Manasa Chakka Points 121
select min(Price/Quantity) from tbl

tbl est la table où vous avez vos données de prix et de quantité. Cela fonctionnera

0voto

Fabian Pijcke Points 1225

Voici une version portable de la solution de Gordon Linoff :

SELECT t.*, (price / quantity) as unit_price
FROM  t t1
WHERE NOT EXISTS (SELECT * FROM t t2 WHERE t2.price / t2.quantity < t1.price / t1.quantity);

Le fait est que LIMIT est spécifique à certains produits (MySQL et PostgreSQL AFAIK).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X