2009-11-25 3 views
3

내가 지금 같은 데이터 테이블을 얻을 : 나는 제품에 대한 최저 가격과 MySQL의에서 해당 상인을 선택하고자하는MySQL의 그룹은 최소 값을 반환하고 해당 행 데이터가

- PK_table - merchantName - price - Product 
- 1  - argos  - 7  - 4 
- 2  - comet  - 3  - 4 
- 1  - Dixon  - 1  - 3 
- 1  - argos  - 10 - 4 

.

내가 시도 :

SELECT Product, merchantName, min(price) 
FROM a_table 
GROUP BY product 

는 첫째 판매자 이름과 MIN이 아닌 해당 상인을 선택하기 때문에 그러나 반환되는 결과가 잘못입니다.

어떻게 하시겠습니까?

답변

7
SELECT Merchant.Product, Merchant.Name, Merchant.Price 
FROM a_table AS Merchant 
JOIN 
(
SELECT Product, MIN(Price) AS MinPrice 
FROM a_table 
GROUP BY Product 
) AS Price 
ON Merchant.Product = Price.Product 
AND Merchant.Price = Price.MinPrice 

두 명의 판매자가 동일한 저가형, 저가형 인 경우 두 행을 반환합니다.

+1

우리는 밑줄을 긋지 않을 것입니까? –

+1

오래된 것을 불러 일으키는 것에 대해 유감스럽게 생각합니다. 하위 쿼리없이이 작업을 수행 할 수있는 방법이 있는지 궁금합니다. 'MIN' 내부의 표현식이 복잡하고 시간이 오래 걸리므로 하위 쿼리를 수행 할 수 있습니다. – Manu

+0

제대로 최적화되고 단일 제품 만 원할 경우이 쿼리는 필요한 행에 대해서만 MIN 계산을 수행합니다. 엔진이 최적화되지 않은 경우 (모든 제품에 대해 MIN을 계산하는 경우) 'FROM a_table'을 'FROM a_table WHERE Product = Some_Product'로 변경하여 수동으로 최적화 할 수 있습니다. 모든 제품에 대한 쿼리를 원할 경우 하위 선택을 사용해야하지만 최종 결과에 필요한 모든 계산이 필요하므로 괜찮습니다. –