在分組之前添加ORDER BY子句似乎可以解決問題。但是,在我繼續前進並在我的應用程序中包含此查詢之前,我只想知道此方法是否總能返回正確的值。這是正確的方法嗎?我已經看到了一些使用子查詢的例子,但是我也讀過這個效率低下的例子。
不,這不是正確的做法。
我相信你是在談論這樣的查詢:
SELECT product.*, MIN(qty)
FROM product
GROUP BY
type
ORDER BY
qty
你在做什麼在這裏使用MySQL
的擴展,它允許你在一個GROUP BY
查詢選擇非聚集/解組列。
這既包含JOIN
並在PRIMARY KEY
一個GROUP BY
,像這樣的查詢主要用於:
SELECT order.id, order.customer, SUM(price)
FROM order
JOIN orderline
ON orderline.order_id = order.id
GROUP BY
order.id
這裏,order.customer
既不組合也不彙總,但因爲你是分組上order.id
,它保證在每個組內具有相同的值。
就你而言,qty
的所有值在組內都有不同的值。
無法保證引擎將從哪個記錄中獲取該值。
你應該這樣做:
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
)
如果您創建product (type, qty, id)
索引,這個查詢將工作速度快。
謝謝!這是一個非常豐富的答案,並且查詢效果很好。 – poleposters 2010-10-29 10:03:17