2013-02-01 3 views
3

특정 문제를 해결하기 위해 수 시간 동안 앉아 있었지만 얻을 수 없었습니다. 마지막으로 여기에 게시하기로 결정했습니다. 여기에 몇 가지 기록,한 가지 유형의 기록 만 가져 오기

╔════════╦════════════╦═════════╦══════════════════╗ 
║ AUTOID ║ PERSONNAME ║ FLOWER ║ Other columns... ║ 
╠════════╬════════════╬═════════╬══════════════════╣ 
║  1 ║ Alex  ║ Rose ║     ║ 
║  2 ║ Rene  ║ Rose ║     ║ 
║  3 ║ Rene  ║ Jasmin ║     ║ 
║  4 ║ Darwin  ║ Rose ║     ║ 
║  5 ║ Alex  ║ Rose ║     ║ 
║  6 ║ Darwin  ║ Jasmin ║     ║ 
║  7 ║ Alex  ║ Rose ║     ║ 
║  8 ║ Rene  ║ Jasmin ║     ║ 
║  9 ║ Hello  ║ World ║     ║ 
║  10 ║ Hello  ║ World ║     ║ 
╚════════╩════════════╩═════════╩══════════════════╝ 
나는이 결과를 얻을 수있는 방법

, 모두 그/그녀의 기록에 꽃의 한 종류를 가지고있는 사람입니다.

╔════════════╦════════════╗ 
║ PERSONNAME ║ FLOWERNAME ║ 
╠════════════╬════════════╣ 
║ Alex  ║ Rose  ║ 
║ Hello  ║ World  ║ 
╚════════════╩════════════╝ 

제가 시도한 가장 좋은 것은 아래의 쿼리입니다. 여전히 작동하지 않습니다.

SELECT DISTINCT t1.PersonName, t1.Flower 
FROM TableName t1 
     INNER JOIN 
     (
      SELECT personname, COUNT(DISTINCT flower) totals 
      FROM tableName 
      GROUP BY personname, Flower 
     ) t2 ON t1.personname = t2.personname and 
        t2.totals = 1 

아이디어가 있으십니까? 이 문제에 GROUP BY 절, HAVING 절과 COUNT()을 사용할 수 있습니다

+0

무엇이 논리입니까? 왜 그 두 기록 만? – fthiella

+0

그런 결과를 얻는 데 필요한 논리는 무엇입니까? – kapa

+0

@fthiella 모든 사람은 모든 레코드에 대해 하나의 유형의 꽃만 있기 때문에. –

답변

4

, 것보다 항상 더 많은이 때문에, 서브 쿼리

SELECT PersonName, MAX(Flower) flowerName 
FROM TableName 
GROUP BY PersonName 
HAVING COUNT(DISTINCT Flower) = 1 
+1

와우! 이것은 우아한 해결책입니다! 매력처럼 작동합니다. –

+0

당신은 'D : 환영합니다. –

0

에 가입하거나 할 필요가 없습니다 고양이를 피우는 편도 ...

SELECT x.* 
    FROM tablename x 
    LEFT 
    JOIN tablename y 
    ON y.personname = x.personname 
    AND ((y.flower <> x.flower) 
    OR (y.flower = x.flower AND y.autoid < x.autoid)) 
WHERE y.autoid IS NULL; 
관련 문제