Không, đây không phải là cách tiếp cận chính xác.
Tôi tin rằng bạn đang nói về một truy vấn như thế này:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
Những gì bạn đang làm ở đây là sử dụng MySQL
tiện ích mở rộng của cho phép bạn chọn các cột chưa được tổng hợp / không được nhóm trong một GROUP BY
truy vấn.
Điều này chủ yếu được sử dụng trong các truy vấn có chứa cả JOIN
và GROUP BY
trên PRIMARY KEY
, như thế này:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
Tại đây, order.customer
không được nhóm cũng không được tổng hợp, nhưng vì bạn đang nhóm trên order.id
, nó được đảm bảo có cùng giá trị trong mỗi nhóm.
Trong trường hợp của bạn, tất cả các giá trị của qty
có các giá trị khác nhau trong nhóm.
Nó không được đảm bảo từ bản ghi nào trong nhóm mà công cụ sẽ nhận giá trị.
Bạn nên làm điều này:
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
)
Nếu bạn tạo chỉ mục trên product (type, qty, id)
, truy vấn này sẽ hoạt động nhanh.