MySQL 에서 지정 한 필드 정 보 를 다시 표시 합 니 다.

MYSQL 의 select distinct name from table 문 구 를 사용 할 때,다시 시작 한 name 필드 의 정 보 를 출력 할 뿐,수험생 ID,시험 시간,시험 성적 등의 정 보 를 출력 할 수 있 기 를 바 랍 니 다.쓰다
?
1 select distinct name, sorce from table
그 결과 제거 가 효과 가 없 는 것 으로 나 타 났 습 니 다.MYSQL 은 sorce 와 name 이 동시에 중복 되 어야 제거 할 수 있다 고 생각 하기 때 문 입 니 다.최종 해결 방법 은 다음 과 같다.
?
1 select *, count (distinct name) from table group by name
SQL 문장 에 limit,orderby 등 조건 이 있다 면 group by 뒤에 두 어야 합 니 다.이렇게 하면 무 거 운 것 도 제거 하고 더 많은 필드 정 보 를 출력 할 수 있 는 목적 을 달성 할 수 있다.
SELECT 문 구 는 특정한 필드 의 중복 정 보 를 제거 합 니 다.예 를 들 어:  표 이름:table  id uid username message dateline  1 6 a 111 1284240714(타임스탬프)  2 6  a    222    1268840565  3 8  b    444    1266724527  4 9  c    555    1266723391  실행 문(username 필드 에서 중복 정 보 를 제거 하고 시간 에 따라 정렬): 
SELECT * 
FROM table a INNER JOIN ( SELECT max( dateline ) AS dateline
FROM table GROUP BY uid ) b ON a.dateline = b.dateline
GROUP BY id ORDER BY a.dateline DESC

결과:  id uid username message dateline  1 6 a 111 1284240714(타임스탬프)  3 8  b    444    1266724527  4 9  c    555    1266723391  이 문 구 는 최신 기록 정 보 를 표시 하 는 데 사 용 됩 니 다.한 지역 에서 특정한 정보(예 를 들 어 사용자)가 동시에 여러 번(한 번 이상)나타 나 는 것 을 허용 하지 않 습 니 다.  후기:효율 문제  이 문 구 를 사용 하기 시작 했다. 
select * from table where dateline IN ( select max(dateline) from table GROUP BY uid ) ORDER BY dateline DESC 

IN:처리 데이터 의 양 이 비교적 많 을 때 비효 율 적 이 라 고 할 수 있 습 니 다.그래서 내 연 으로 최적화 하여 계산 해 보면 6 배가 넘 습 니 다.  계속 효율 적 으로 색인 을 추가 합 니 다~

좋은 웹페이지 즐겨찾기