문제

MySQL 테이블이 있다고 가정 해 봅시다. people. 각 레코드는 다양한 속성으로 구성되며,이 중에서도 favourite_colour, country, 그리고 age_group.

내가하고 싶은 것은 특정 매개 변수 세트와 유사 하게이 테이블에서 레코드를 검색하는 것입니다. 예를 들어 "Red", "United States"및 "18-25"가 주어지면 가장 좋은 결과는 세 가지 모두와 일치하는 레코드입니다. 이것들은 100% 일치입니다.

그러나 두 매개 변수의 조합 (66% 일치) 또는 하나의 매개 변수 (33% 일치)와 일치하는 레코드를 검색하고 싶습니다. 또한 추가 비교 지점을 정의하고 싶습니다 (예 : underwear_type, marital_status, 등.).

이 문제에 대한 비교적 효율적인 해결책이 있습니까?

도움이 되었습니까?

해결책

예, 다음과 같은 각 비교를 바꿀 수 있습니다. favourite_colour='Red'CAST( (favourite_colour='Red') AS INTEGER) &씨; 그럼, 당신 SUM 이 모든 것, 즉

SELECT
userId,
SUM( (favourite_colour='Red'),
     (country='US'),
     (age_group='18-25') ) AS match_score
FROM people
WHERE match_score >= 2
ORDER BY match_score DESC

다음에 완벽한 일치를 제공합니다. 더 많은 수표로 쉽게 일반화 할 수 있습니다!-)

다른 팁

세 가지 첫 번째는 쉽습니다.

select * from people
where
(case when color = 'Red' then 33 else 0 end + 
case when age_group = '18-25' then 33 else 0 end + 
case when country = 'United States' then 33 else 0 end)>=33

"비교의 추가 점"부분을 이해하지 못합니다. 설명해 주시겠습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top