2013-01-09 5 views
1

:MYSQL - 다음 MySQL의 결과 집합을 감안할 때 그룹

여기에 두 가지 제품이 있습니다
id  code  name    importance 
'1234', 'ID-CS-B', 'Chocolate Sauce', '1', 
'1122', 'ID-MC-A', 'Mint Choc Chip', '5', 
'5621', 'ID-MC-B', 'Mint Choc Chip', '4', 
'1221', 'ID-CS-A', 'Chocolate Sauce', '2', 
'1212', 'ID-CS-C', 'Chocolate Sauce', '3', 

: 초콜릿 소스와 민트 Choc 칩. 중요성에 따라 각 제품에서 하나의 인스턴스를 가져오고 싶습니다.

나는 가장 중요한 민트 Choc 칩 제품 및 열 "중요성"을 사용하여 가장 중요한 초콜릿 소스 제품을 원하는 : 물론이 시도

답변

3
SELECT x.* 
     FROM my_table x 
     JOIN 
     (SELECT name, MAX(importance) max_importance FROM my_table GROUP BY name) y 
     ON y.name = x.name 
     AND y.max_importance = x.importance; 
+0

고마워요! 위에 표시된 테이블은 쿼리의 결과입니다. 쿼리를이 결과 집합에 연결하는 구문은 무엇입니까? – Johnathan

+0

원래 쿼리의 복잡도에 따라 다릅니다. 분명한 대답은 'my_table'의 각 인스턴스를 '(your_query)'로 바꾸는 것이지만 중첩 된 하위 쿼리없이 전체 작업을 (더 효율적으로) 수행 할 수 있습니다. – Strawberry

0

더 중요한 높은 값을,

select b.name, max(a.importance) 
from t b 
left join t a 
on b.id = a.id 
group by b.name 
; 

결과 :

NAME    MAX(A.IMPORTANCE) 
Chocolate Sauce  3 
Mint Choc Chip  5 
+0

@Johnathan은 원래 검색어가 어떻게 표시되는지 알려줍니다. 그러나 현재 수행중인 작업에 따라 성능이 향상 될 수 있습니다. – bonCodigo