[英]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.