I had this query:
SELECT `name`, floor(max(score)), skill
FROM
(SELECT k.`name`, s.`name` as skill, *long complex formula* as score
FROM `keywords_skills` ks
JOIN keywords k ON k.id = ks.keyword_id
JOIN skills s ON s.id = ks.skill_id
JOIN jobs_keywords jk ON jk.keyword_id = k.id
WHERE job_id = 87293) t1
GROUP BY `name`
ORDER BY `name` asc
显然我希望 'skill' 引用与 max(score) 相同的行,但我不知道如何实现。然而,当我在子查询中添加 ORDER BY
如下:
SELECT `name`, floor(max(score)), skill
FROM
(SELECT k.`name`, s.`name` as skill, *long complex formula* as score
FROM `keywords_skills` ks
JOIN keywords k ON k.id = ks.keyword_id
JOIN skills s ON s.id = ks.skill_id
JOIN jobs_keywords jk ON jk.keyword_id = k.id
WHERE job_id = 87293
ORDER BY score DESC) t1
GROUP BY `name`
ORDER BY `name` asc
一切似乎运作得很好!我的问题是:我解决了问题还是只是实现了一个不可靠的hack,以后会困扰我?
编辑:也许我应该更详细地解释一下我正在寻找什么:
关键词和技能之间具有多对多的关系。我不仅仅是寻找最高分数的关键词,而是每个关键词的最高分数的技能。
我还认为我可以在子查询中以某种方式使用
LIMIT 1
,但到目前为止,我还没有想到实现它的方法。