2017-03-08 1 views
1

이 질문과 비슷한 질문이 여기까지 왔지만 지금까지는 내 코드에 제공된 대답을 구현할 수 없었습니다. 다른 열이 동일하게 유지되고 내 코드에 INNER JOIN이있는 동안 한 열의 중복 만 구별하기를 원하기 때문입니다. INNER JOIN은 대부분의 제공된 응답에서 PARTITION 함수를 사용하기 때문에 문제가 있습니다. SQL을 처음 접하는 초보자이기 때문에 이것을 통합하는 방법을 모르겠습니다. PARTITION이있는 INNER JOIN을 사용하면 도움이 될 것입니다.SQL 쿼리 - 다른 열의 고유 한 값 (INNER JOIN 포함)에 대해 하나의 열에 서 구별

파이썬에서이 내보내기를 수행 할 수있는 반면 (현재 원하는 출력을 사용할 예정 임)이 코드는 현재 2 백만 행을 출력하므로 작업과 확인에 많은 시간이 소요됩니다. 여기에 코드입니다 : 사용

SELECT client_ip_address, language_enum_code 
FROM vw_user_session_log AS usl 
INNER JOIN vw_user_topic_ownership AS uto 
ON usl.user_id = uto.user_id 

가까이 원하는 출력을하지만, 오히려 그들 모두를 제거 뒤에 하나 개의 중복 행을 떠나는 것보다 저를 얻는 대신 SELECT의 DISTINCT SELECT. 중복 행 중 하나를 유지하면서이 기능을 사용하는 것에 대한 조언이 선호됩니다. 나는 데이터베이스에 대한 읽기 전용 연결이므로 DELETE FROM 접근법은 here이 가능할 것입니다. 쿼리 출력에서 ​​임시 쿼리 가능 테이블을 만들 수 있다면 가능하다고 생각하지 않고 서투른 것처럼 보입니다.

원시 데이터 샘플 :

user_id: client_ip_address: language_enum_code:   (other stuff...) 
    4   194:4:62:18    107 
    2   101:9:23:34    14 
    3   180:4:87:99    15 
    3   194:4:62:18    15 
    4   166:1:19:27    107 
    2   166:1:19:27    14 

원하는 결과는 : 당신이 볼 수 있듯이

user_id: client_ip_address: language_enum_code:   (other stuff...) 
    4   194:4:62:18    107 
    2   101:9:23:34    14 
    3   180:4:87:99    15 

, 어떤 ID-열거 조합 한 번만 발생하는 필터링해야합니다. 이것이 ip-enum 조합이 아닌 이유는 여러 사용자가 동일한 IP 주소를 통해 연결할 수 있기 때문입니다.

+0

는 원시 데이터의 샘플 및 예상 결과를 제공 – Alex

+0

완료를 여전히 찾고하시기 바랍니다 이상적인 대답. –

+0

올바르게 이해했다면 그 조합에 대해 임의의 client_ip_address가있는 고유 한 user_id, language_enum_code를 원하십니까? '원하는 결과'에서 데이터를 버렸기 때문에 (예 : '166 : 1 : 19 : 27'). 보관할 IP 주소와 버릴 IP 주소를 어떻게 선택 했습니까? – Matt

답변

0

,이 같은 무언가가 수행해야합니다

SELECT user_id, min(client_ip_address), language_enum_code 
FROM vw_user_session_log AS usl 
INNER JOIN vw_user_topic_ownership AS uto 
ON usl.user_id = uto.user_id 
where client_ip_address is not null 
group by user_id, language_enum_code 
+0

작동하지만 새로운 문제가 발생합니다. 이 필터 전에 필터링해야하는 null IP 값이 있습니다. 어디서 'WHERE IP! = NULL'문장을 넣을 지 모르겠다. 여기서 도와 주면 대답이 될 것이다. –

+0

완료, 지금 시도 – Matt

+0

좋아요! 이유를 아십니까? = NULL이 작동하지 않습니까? –

0

단순히 집계를 원합니까?

SELECT client_ip_address, GROUP_CONCAT(DISTINCT language_enum_code) 
FROM vw_user_session_log usl INNER JOIN 
    vw_user_topic_ownership uto 
    ON usl.user_id = uto.user_id 
GROUP BY client_ip_address; 

쉼표로 구분 된 목록에있는 각 언어 코드 client_ip_address 당 하나 개의 행을 반환합니다.

MIN() 또는 MAX()을 사용하여 각각 client_ip_address에 대해 language_enum_code의 임의의 값을 얻을 수도 있습니다. 이 IP는 각 USER_ID/열거 콤보를 위해 계속 해결하는 상관하지 않는 경우

+0

답변 해 주셔서 감사합니다. 필자는 Python을 통해 필터를 걸러 내기로했지만, 이것은 흥미로운 접근 방식입니다. –

관련 문제