2011-03-03 4 views
1

안녕하세요. 다시 한 번이 질문을 검토해 주셔서 감사합니다.필드 비교 및 ​​백분율 얻기

나는 방문자를 위해 하나의 mysql 테이블을 가지고있다. 좋아하는 가수를 목록에 추가 할 수 있습니다.

1. Michael Jackson 
2. Elvis Presley 
3. Ray Charles 
4. Stevie Wonder 

사용자 테스터도있어 4 좋아하는 가수 :

1. Michael Jackson 
2. Ray Charles 
3. Stevie Wonder 
4. Lady Gaga (sorry folks) 

것은 내가 좋아하는 것이 무엇에

user_artist_favorites 
id 
user_id 
artistName 

이의이 Moonwalker 4 좋아하는 가수를 가지고 있다고 가정 해 봅시다 : 그래서 테이블은 매우 간단 보인다 이제 두 명의 사용자를 비교하여 다음과 같이 출력하십시오. Moonwalker & 테스터는 음악에서 75 % 동일한 맛을가집니다.

시작하는 방법? 누구든지 올바른 방향으로 나를 가르쳐 주시겠습니까?

제공 할 수있는 도움에 미리 감사드립니다.

+0

무엇의 75 %? 이것은 당신의 정의에 달려 있습니다. 백분율은 항상 상대적입니다. – Czechnology

+0

테스터가 문 워커 (Moonwalker)와 같은 아티스트를 가지고 있다면 100 %가 될 것입니다. 이제 그는 4 점 중 3 점을 얻었으므로 두 명의 사용자가 모두 좋아하는 표에 75 %를 차지합니다. 아니면 당신이 묻고있는 것이 아닙니까? – moonwalker

+1

나는 얼마나 많은 가수가 총 %와 같은지 알고 싶다. 즐겨 찾기의 수는 항상 4입니까? 이름이 정확히 동일합니까 (즉, 드롭 다운 목록에서 선택되어 있습니까?) 또한 한 번에 두 명의 사용자를 비교 한 것입니까? – Rasika

답변

4
Select T1.user_id 
    , Count(T2.user_id)/Count(T1.user_id) * 100.0 As PercentMatch 
From user_artist_favorites As T1 
    Left Join user_artist_favorites As T2 
     On T2.artistname = T1.artistname 
      And T2.user_id = 'Tester' 
Where T1.user_id = 'Moonwalker' 
Group By T1.user_id 
Union All 
Select T1.user_id 
    , Count(T2.user_id)/Count(T1.user_id) * 100.0 
From user_artist_favorites As T1 
    Left Join user_artist_favorites As T2 
     On T2.artistname = T1.artistname 
      And T2.user_id = 'Moonwalker' 
Where T1.user_id = 'Tester' 
Group By T1.user_id 

Union All 쿼리의 첫 번째 부분은 Tester가 Moonwalker와 같은 비율을 반환합니다. 두 번째 쿼리는 Moonwalker가 Tester와 같은 비율을 반환합니다.

+1

이렇게하면 두 명의 사용자 만 비교할 수 있지만 전체 SQL 솔루션을 생각해 볼 수 있습니다. – Rasika

+0

@ 토마스 : 솔루션에 대해 감사드립니다. 아직 시도하지는 않았지만 유망 해 보인다. – moonwalker

+1

@ 라씨 - 부여. 이것은 MS SQL Server의 Cross Apply가 편리한 곳입니다. 사용자 쌍을 선택하고 Union All 쿼리 내부의 사용자를 참조 할 수 있습니다. 불행히도, MySQL에는 내가 알고있는 것에 해당하는 것이 없습니다. – Thomas

1

두 사람의 아티스트 이름별로 정렬 된 목록을 읽고 루프와 일치하는 가수의 수를 계산합니다. 색인에서 알파벳순으로 더 큰 목록을 확인하고 더 낮은 목록에서 포인터를 증가시켜야하므로 루프가 약간 복잡 할 것입니다.

+0

실제로 소리가 복잡합니다. 대답 주셔서 감사합니다, 나는 당신이 제안한 것을 시도 할 것입니다. – moonwalker