Tidak, ini bukan pendekatan yang benar.
Saya yakin Anda sedang membicarakan pertanyaan seperti ini:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Apa yang Anda lakukan di sini menggunakan MySQL
ekstensi yang memungkinkan Anda memilih kolom yang tidak teragregasi/tidak dikelompokkan dalam GROUP BY
kueri.
Ini sebagian besar digunakan dalam kueri yang berisi JOIN
dan GROUP BY
pada PRIMARY KEY
, seperti ini:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Di sini, order.customer
tidak dikelompokkan atau digabungkan, tetapi karena Anda mengelompokkan di order.id
, dijamin memiliki nilai yang sama dalam setiap grup.
Dalam kasus Anda, semua nilai qty
memiliki nilai yang berbeda dalam grup.
Tidak dijamin dari catatan mana dalam grup mesin akan mengambil nilainya.
Anda harus melakukan ini:
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
)
Jika Anda membuat indeks pada product (type, qty, id)
, kueri ini akan bekerja dengan cepat.