我有下表:
+---------+------------+
| EntryID | CategoryID |
+---------+------------+
| 11 | 15 |
| 11 | 18 |
| 186 | 15 |
| 186 | 18 |
| 186 | 334 |
| 187 | 15 |
| 187 | 18 |
| 187 | 337 |
| 278 | 15 |
| 278 | 18 |
| 278 | 337 |
| 278 | 457 |
+---------+------------+
我希望按照匹配的相关性顺序得到结果,这是CategoryID rows / CategoryIDs specified
的百分比。
我坚持认为,此计算需要处理多个categoryID
个查询。例如,如果我要查找categoryID
18,entryID
11应该首先出现,因为它有50%的匹配百分比(请原谅我的陈词滥调命名),然后186或187来到第二匹配百分比为33%(在我的用例中,排序无关紧要),然后278将最后匹配百分比为25%。
我的问题是:有没有办法在一个/多个SQL查询/查询中进行这种排序? Java可以随时使用,所以我可以用Java而不是MySQL排序,但我我想看看是否有纯SQL解决方案。另外,是否有更好的方法来计算我的案例中的相关性?
(只是为了好玩,这个问题有更好的标题吗?)
答案 0 :(得分:3)
听起来你想要这样的东西:
select EntryID, count(*)
from your_table
group by EntryID
order by count(*) asc
更新:根据更新后的问题,这是实现这一目标的一种方法:
select your_table.EntryID, count(*) as matches, sub_query.total_rows
from your_table
inner join (
select EntryID, count(*) as total_rows
from your_table
group by EntryID
) sub_query on sub_query.EntryID = your_table.EntryID
where your_table.CategoryID = 18
group by your_table.EntryID
order by (count(*) / sub_query.total_rows) desc