Non, ce n'est pas la bonne approche.
Je pense que vous parlez d'une requête comme celle-ci :
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Ce que vous faites ici utilise MySQL
de qui vous permet de sélectionner des colonnes non agrégées/non groupées dans un GROUP BY
requête.
Ceci est principalement utilisé dans les requêtes contenant à la fois un JOIN
et un GROUP BY
sur une PRIMARY KEY
, comme ceci :
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Ici, order.customer
n'est ni groupé ni agrégé, mais puisque vous regroupez sur order.id
, il est garanti d'avoir la même valeur au sein de chaque groupe.
Dans votre cas, toutes les valeurs de qty
ont des valeurs différentes au sein du groupe.
Il n'est pas garanti à partir de quel enregistrement au sein du groupe le moteur prendra la valeur.
Vous devriez faire ceci :
SELECT p.*
FROM (
SELECT DISTINCT type
FROM product p
) pd
JOIN p
ON p.id =
(
SELECT pi.id
FROM product pi
WHERE pi.type = pd.type
ORDER BY
type, qty, id
LIMIT 1
)
Si vous créez un index sur product (type, qty, id)
, cette requête fonctionnera rapidement.