簡體   English   中英

按另一個表的結果排序

[英]Order by result from another tables

嗨,我的技能表如下

在此處輸入圖片說明

各種用戶向其個人資料添加技能。 現在,我想列出所有技能的降序使用。 如下圖

PHP(10),ASP(5),Perl(1)

它的意思是10位用戶添加了php作為技能,5位用戶ASP等等。

我已將技能存儲在用戶表的技能列中,並以逗號分隔

在此處輸入圖片說明

嘗試這個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM