2012-09-24 6 views
2

내 데이터베이스 구조에 열이 포함되어 있습니다 : id, name, value, dealer. 각각에 대해 value 행을 검색하려고합니다.dealer. 나는 MIN()GROUP BY으로 여전히 엉망이되고있다.MySQL - 최저값 가져 오기

+1

입니다 :이 그런 식으로 할 것인가? – Hkachhia

+0

정확히 무엇을 시도 했습니까? 코드를 게시하면 문제를 직접 해결할 수있는 능력이 있음을 보여줄 수 있으며 어쩌면 누군가가 오류를 지적했을 수도 있습니다. - 귀하의 질문에 대한 현재 상태에서 당신은 당신을 위해 당신의 일을 요구하고 있습니다. - 실제로 당신은 단지 당신이 문제를 해결할 수 없다는 것을 알리고 도움을 청하지도 않습니다 ... –

+0

나의 접근 방식은 간단하고 틀렸습니다 : 'SELECT MIN (value), dealer FROM table_name GROUP BY 딜러 별'과 같은 것 - 저는 알고있었습니다. 그 해결책은 어딘가에 있으므로 코드가 오도 될 수 있습니다. – acid

답변

8

Solution1 :

SELECT t1.* FROM your_table t1 
JOIN (
    SELECT MIN(value) AS min_value, dealer 
    FROM your_table 
    GROUP BY dealer 
) AS t2 ON t1.dealer = t2.dealer AND t1.value = t2.min_value 

Solution2 :

SELECT t1.* FROM your_table t1 
LEFT JOIN your_table t2 
ON t1.dealer = t2.dealer AND t1.value > t2.value 
WHERE t2.value IS NULL 

이 문제는 매우 유명한, 그래서 MySQL의 설명서에서이를위한 특별한 페이지가있다.

확인이 : Rows Holding the Group-wise Maximum/Minimum of a Certain Column

+0

딜러 A의 값이 1, 2, 3이고 딜러 B의 값이 2, 3, 4이면 어떻게됩니까? 귀하의 질의는 딜러 A에 대해 1과 2 행을 반환합니다. – WojtusJ

+0

@WojtusJ 아니요, 한번 더 쿼리를 확인하지 않습니다. – xdazz

+0

제 코멘트는 판매자의 상태가 아닌 응답자의 첫 번째 개정입니다. :-) 이제 편집 한 것을 볼 수 있습니다. 그리고 그것은 정확합니다. 사실, 제 대답과 같습니다. ;-) – WojtusJ

4
select id,name,MIN(value) as pkvalue,dealer from TABLENAME 
group by id,name,dealer; 

여기에 ID, 이름, 딜러별로 모든 행을 그룹화하면 pkvalue로 최소값이 표시됩니다.

+0

op는 각 딜러에게 최소값을 요구합니다. – xdazz

+0

그건 OP가 정말로 원하는 것이 아니에요. 같은 상인이지만 값, 이름 및 ID가 다른 두 개의 행이있는 경우 OP는 더 낮은 값을 가진 행을 원하며 쿼리는 두 행을 반환합니다. – WojtusJ

0

시도 다음 당신은 행에 대한 그 값을 갖는 검색 한 후 각 대리점에 대해 가장 낮은 값을 해결하고, 필요

SELECT dealer, MIN(value) as "Lowest value" 
FROM value 
GROUP BY dealer; 
1
SELECT MIN(value),dealer FROM table_name GROUP BY dealer; 
0

우선 특정 딜러. 쿼리에

SELECT a.* 
FROM your_table AS a 
     JOIN (SELECT dealer, 
        Min(value) AS m 
      FROM your_table 
      GROUP BY dealer) AS b 
     ON (a.dealer= b.dealer 
       AND a.value = b.m) 
0
select id, name, value, dealer from yourtable where dealer 
in(select min(dealer) from yourtable group by name, value)