2011-01-25 4 views
0

나는 사용자 그룹을 연령별로 그룹화했습니다.하지만 각 사용자는 국적을 가지고 있으며 사용자의 국적이 미국인 경우 그룹에서 그 값을 원합니다 레코드, 현재 그것이 발견 첫 번째 국적을 것 같다, 내가 어떻게이 쿼리를 작성할 수 있습니까? 할mysql group by 그리고 각 그룹 레코드의 값을 필터링

답변

0

한 가지 방법은 다음과 같습니다

무엇이하는 일은 GROUP_CONCAT 한 시대의 모든 국적을 결합한 것입니다
SELECT *, IF(INSTR(GROUP_CONCAT('--', nationality, '--'), '--US--'), 
      'US', nationality) 
FROM table GROUP BY age; 

와 그들 사이의 문자열을 '미국'발견하면, 그것은 '미국'을 반환하고 그렇지 않으면 국적을 반환합니다. 또한 국적의 시작과 끝에 "-"을 추가하여 'US'가 '- US--'가되도록합니다. 당신이 그렇게하지 않았다면, 쿼리는 또한 'US'이라는 연속 된 문자를 포함하는 다른 모든 국적은 미국을 의미한다고 생각할 것입니다. 그러나 '-'문자는 내부적으로 만 사용되며 최종 결과에는 표시되지 않습니다.


편집 :

SELECT * FROM (SELECT * FROM table WHERE nation='US' 
       UNION 
       SELECT * FROM table WHERE nation!='US') AS tmp 
GROUP BY age; 

그래서, 먼저 다음 그의 국적이 미국이 아닌 사람을 선택 그의 국적이 미국을하다 사람을 선택하고 두 결합 : 다른 (청소기하지만 이상) 방법은 내 마음에 와서 사람들의 집합 그래서 당신은 미국과 다른 사람에서 첫 번째 사람이있는 순서로 사람의 테이블을 얻을. 그런 다음 GROUP BY 작업을 해당 테이블에 수행하면 그 나이에 미국인이 적어도 한 명이라면 항상 국적이 부여됩니다. 왜냐하면 항상 그 사람이 먼저 오기 때문입니다.

+0

그리고 where 절을 US? – marc

+0

죄송합니다. 처음에는 질문을 이해하지 못했지만 지금은 그랬습니다. 그래서 나는 내 대답을 편집했다. – kynnysmatto