[英]Order by result from another tables
尝试这个:
select id, name
from (
select *, (select sum(1) from user u where find_in_set(s.id, u.skills)) as cnt
from skills s
) t
order by cnt desc
-- limit 20
假设您有另一个表/关系来表示user_skills,其中包含(例如)user_id和skill_id外键,那么您想要将此表/关系加入到Skills表并将结果分组如下:
select name, count(skill_id) as ranking
from skills join user_skills on skills.id = user_skills.skill_id
group by name
order by count(skill_id) desc, name asc;
它不包括任何用户未选择的技能。 如果您也想包括这些,请将联接更改为左联接。
编辑:将原始问题更新为包括users表的定义,那么也许就足够了。 同样,您将需要左联接来包括没有用户选择的技能。
select skills.name, count(users.id) as qty
from skills join users
on locate(concat(',', skills.id, ','), concat(',', users.skills, ',')) > 0
group by skills.name
order by count(users.id) desc, skills.name asc;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.