mysql订购解决方案:它将一致地工作吗?
|
我有这个查询:
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
一切似乎都很棒!我的问题是:我是否解决了我的问题,或者只是实施了一种不可靠的黑客攻击方式,以后会困扰我?
编辑:也许我应该解释更多我想要的东西:
关键字和技能之间存在多对多的关系。我并不是在寻找得分最高的关键字,而是每个关键字得分最高的技能。
我还认为我可以某种方式使用LIMIT 1
(也许在子查询中),但是到目前为止,还没有想到实现它的方法。
没有找到相关结果
已邀请:
1 个回复
芭隘的盘石
内部查询应仅包含关键字ID和关键字的最高得分-全部与questino中的一个Job_ID相关联。然后,再次加入,但是这次,我们不再需要job_keywords,因为每个K.ID和名称描述都在预查询中。然后,只需重新加入与合格SCORE相匹配的技能即可。