在分组之前添加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