假设我有一个MySQL表people
。每条记录都包含各种属性,其中包括favourite_colour
,country
和age_group
。
我想要做的是从这个表中检索它们与一组特定参数的相似性。例如,给定“红色”,“美国”和“18-25”,最好的结果将是那些匹配所有三个的记录。这些将是100%匹配。
但是,我还想检索匹配两个参数(66%匹配)或任何一个参数(33%匹配)的任意组合的记录。此外,我希望能够定义其他比较点(例如underwear_type
,marital_status
等。)
这个问题是否有相对有效的解决方案?
答案 0 :(得分:11)
是的,您可以将每个比较(例如favourite_colour='Red'
& c)转换为值0(假)或1(真) - mysql将隐式执行此操作,但为了一般性,您可能需要
CAST( (favourite_colour='Red') AS INTEGER)
& c;然后,你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
首先为你提供完美的比赛,接下来是2比3;很容易概括到更多的检查! - )
答案 1 :(得分:0)
前三个很容易:
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
我不明白“附加点比较”部分,你能解释一下吗?