MySQL의 다른 일부 열과 함께 고유 열 선택
다음(아마도 오래된) 문제에 대한 적절한 해결책을 찾을 수 없는 것 같아서 누군가가 빛을 볼 수 있기를 바랍니다.나는 내 SQL에 있는 다른 고유하지 않은 열과 함께 하나의 고유한 열을 반환해야 합니다.
제 SQL에는 다음 표가 있습니다.
id name destination rating country
----------------------------------------------------
1 James Barbados 5 WI
2 Andrew Antigua 6 WI
3 James Barbados 3 WI
4 Declan Trinidad 2 WI
5 Steve Barbados 4 WI
6 Declan Trinidad 3 WI
국가별 등급과 함께 목적지와 함께 DISKENT 이름을 반환하는 SQL 문을 원합니다.
id name destination rating country
----------------------------------------------------
1 James Barbados 5 WI
2 Andrew Antigua 6 WI
4 Declan Trinidad 2 WI
5 Steve Barbados 4 WI
보시다시피 제임스와 데클란은 등급은 다르지만 이름은 같아서 한 번만 돌려받습니다.
다음 쿼리는 등급이 다르기 때문에 모든 행을 반환합니다.위 결과 세트를 반품할 수 있는 방법이 없을까요?
SELECT (distinct name), destination, rating
FROM table
WHERE country = 'WI'
ORDER BY id
서브쿼리를 사용하면 가장 높은 값을 얻을 수 있습니다.id
각 이름에 대해 다음을 기준으로 나머지 행을 선택합니다.
SELECT * FROM table
WHERE id IN (
SELECT MAX(id) FROM table GROUP BY name
)
원하신다면, 사용하세요.MIN(id)
각각의 이름에 대한 첫 번째 기록을 얻기 위해서입니다.
그것은 또한 그것으로 할 수 있습니다.INNER JOIN
서브쿼리에 대하여이를 위해서는 성능이 유사해야 하며 하위 쿼리의 두 열에 결합해야 하는 경우도 있습니다.
SELECT
table.*
FROM
table
INNER JOIN (
SELECT MAX(id) AS id FROM table GROUP BY name
) maxid ON table.id = maxid.id
문제는 첫 번째 필드가 아닌 전체 반환 세트에 걸쳐 구별된 기능이 작동한다는 것입니다.그렇지 않으면 MySQL은 어떤 레코드를 반환해야 할지 알 수 없습니다.따라서 MAX, MIN, GROUP_CONCAT, AVG, 또는 여러 다른 기능 중에서 등급에 대한 그룹 기능을 사용하고자 합니다.
마이클은 이미 좋은 답변을 올렸기 때문에 질의를 다시 작성하지는 않을 것입니다.
@rcdmk에 동의합니다. 종속적인 하위 쿼리를 사용하면 성능이 저하될 수 있습니다. 국가 필드를 이미 색인화하고 몇 행만 서버에 도달한다면 GROUP BY가 더 적합할 것 같습니다.쿼리 giben을 @rcdmk로 다시 작성하면서, GROUP BY에 의한 암묵적인 순서 지정을 억제하기 위해 ORDER BY NULL 절을 추가하여 조금 더 빠르게 처리했습니다.
SELECT MIN(id) as id, name, destination as rating, country
FROM table WHERE country = 'WI'
GROUP BY name, destination ORDER BY NULL
당신은 할 수 있습니다.GROUP BY
조항:
SELECT MIN(id) AS id, name, destination, AVG(rating) AS rating, country
FROM TABLE_NAME
GROUP BY name, destination, country
이 쿼리는 하위 쿼리 대안보다 대규모 데이터 세트에서 더 나은 성능을 발휘하며 읽기도 더 쉬울 수 있습니다.
언급URL : https://stackoverflow.com/questions/8552192/select-distinct-column-along-with-some-other-columns-in-mysql
'programing' 카테고리의 다른 글
Mysql 하위 선택이 매우 느립니다. (0) | 2023.09.26 |
---|---|
Laravel 마이그레이션 기본(또는 키) "식별자 이름이 너무 깁니다." (0) | 2023.09.26 |
C vs C++ 사이즈의 (0) | 2023.09.26 |
메모리의 지정된 절대 주소에 변수를 배치하는 방법(GCC 사용) (0) | 2023.09.21 |
마운트가 거부되었습니다.... 경로는 OS X에서 공유되지 않으며 도커에서 알 수 없습니다. (0) | 2023.09.21 |