【发布时间】:2011-04-21 17:22:30
【问题描述】:
我有这个问题:
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(可能在子查询中),但到目前为止还没有想到实现它的方法。
【问题讨论】: