다중 열 쿼리의 한 열에 고유한 값을 가져오는 Oracle 11g SQL
사람들의 표 A, 그들의 모국어, 그리고 다른 열 C3이 주어집니다.C10은 ...로 표시됩니다.
표 A
사용자 언어... 단발 영어존 잉글리쉬블라드 러시안올가 러시아인호세 스페인어
각 고유 언어에 대해 한 행의 모든 열을 선택하는 쿼리를 구성하려면 어떻게 해야 합니까?
원하는 결과
사용자 언어... 단발 영어블라드 러시안호세 스페인어
각각의 다른 언어의 어떤 행이 결과를 낳는지는 저에게 중요하지 않습니다.위의 결과에서 저는 각 언어의 가장 낮은 행 번호를 선택했습니다.
Eric Petroelje는 거의 옳습니다.
SELECT * FROM TableA
WHERE ROWID IN ( SELECT MAX(ROWID) FROM TableA GROUP BY Language )
참고: ROWNUM이 아닌 ROWID(행 고유 ID) 사용(결과 집합 내의 행 번호 제공)
이를 통해 보다 효율적으로 값을 선택하는 데 사용되는 순서를 제어할 수 있습니다.
SELECT DISTINCT
FIRST_VALUE(person)
OVER(PARTITION BY language
ORDER BY person)
,language
FROM tableA;
각 언어에 대해 어떤 사람이 선택되었는지 정말 상관하지 않는 경우 ORDER BY 절을 생략할 수 있습니다.
SELECT DISTINCT
FIRST_VALUE(person)
OVER(PARTITION BY language)
,language
FROM tableA;
Oracle이 약간 녹슬었지만, 이 방법이 효과가 있을 것 같습니다.
SELECT * FROM TableA
WHERE ROWID IN ( SELECT MAX(ROWID) FROM TableA GROUP BY Language )
하위 선택에서 RANK() 기능을 사용한 다음 순위 = 1인 행을 당기면 됩니다.
select person, language
from
(
select person, language, rank() over(order by language) as rank
from table A
group by person, language
)
where rank = 1
효율성을 위해 하퍼처럼 데이터를 한 번만 기록하려고 합니다.그러나 순위()를 사용하지 않으려는 이유는 순위()가 동점을 제공하고 언어별 순서가 아닌 언어별로 그룹화하기를 원하기 때문입니다.여기서 행을 구분하기 위해 절별로 순서를 추가하지만 실제로 데이터를 정렬하지는 않습니다.이를 위해 "null에 의한 주문" 등을 사용합니다.
count(*) over(null을 기준으로 언어순으로 그룹화)
select person, language
from table A
group by person, language
고유 행을 반환합니다.
언급URL : https://stackoverflow.com/questions/983202/oracle-11g-sql-to-get-unique-values-in-one-column-of-a-multi-column-query
'programing' 카테고리의 다른 글
Eclipse C++ : "PATH에서 프로그램 "g++"을 찾을 수 없습니다." (0) | 2023.06.10 |
---|---|
유형 오류: firebase.storage가 기능하지 않습니다. (0) | 2023.06.10 |
매개 변수를 사용하여 쿼리 또는 명령을 실행할 때 Dapper가 Oracle Exception을 실행하는 이유는 무엇입니까? (0) | 2023.06.10 |
장시간(예: 몇 분) 동안 타이머 설정 (0) | 2023.06.05 |
각 그룹에서 최대값이 있는 행 선택 (0) | 2023.06.05 |