정말 좋은 질문입니다. 나는 이미 유용한 답변을 읽었지만 더 정확한 설명을 추가 할 수 있습니다.
추가 정보를 쿼리하지 않는 한 GROUP BY 문으로 쿼리 결과 수를 줄이는 것은 쉽습니다. 다음 테이블 'locations'가 있다고 가정 해 봅시다.
--country-- --city--
France Lyon
Poland Krakow
France Paris
France Marseille
Italy Milano
이제 쿼리
SELECT country FROM locations
GROUP BY country
결과 :
--country--
France
Poland
Italy
그러나 다음 쿼리
SELECT country, city FROM locations
GROUP BY country
"프랑스"의 오른쪽에있는 필드에서 읽고 싶은 프랑스 도시 "리옹", "파리"또는 "마르세유"중 어느 것을 컴퓨터가 어떻게 알 수 있기 때문에 MS SQL에서 오류가 발생합니까?
두 번째 쿼리를 수정하려면이 정보를 추가해야합니다. 이를 수행하는 한 가지 방법은 MAX () 또는 MIN () 함수를 사용하여 모든 후보 중에서 가장 큰 값 또는 가장 작은 값을 선택하는 것입니다. MAX () 및 MIN ()은 숫자 값에만 적용 할 수있을뿐 아니라 알파벳 순서의 문자열 값을 비교합니다.
SELECT country, MAX(city) FROM locations
GROUP BY country
결과 :
--country-- --city--
France Paris
Poland Krakow
Italy Milano
또는:
SELECT country, MIN(city) FROM locations
GROUP BY country
결과 :
--country-- --city--
France Lyon
Poland Krakow
Italy Milano
알파벳 (또는 숫자) 순서의 양쪽 끝에서 값을 선택하는 것이 좋으면 이러한 기능은 좋은 솔루션입니다. 그러나 이것이 사실이 아닌 경우 어떻게해야합니까? 예를 들어 문자 'M'으로 시작하는 특정 특성의 값이 필요하다고 가정합니다. 이제 상황이 복잡해집니다.
지금까지 내가 찾은 유일한 해결책은 전체 쿼리를 하위 쿼리에 넣고 외부에서 추가 열을 직접 작성하는 것입니다.
SELECT
countrylist.*,
(SELECT TOP 1 city
FROM locations
WHERE
country = countrylist.country
AND city like 'M%'
)
FROM
(SELECT country FROM locations
GROUP BY country) countrylist
결과 :
--country-- --city--
France Marseille
Poland NULL
Italy Milano
SELECT DISTINCT * FROM table
당신을 위해 작동하지 않습니다?