簡體   English   中英

MySQL:獲取每個類別的前100條記錄

[英]MySQL : getting top 100 records for each category

我有一個表: consultant_project_score ,它具有以下字段idproject_idfinal_score 我想生成一個查詢,其中顯示每個project_id的前100個final_score。 我正在使用MySQL workbench 6.3 ,但無法使用任何create/insert語句。 有什么辦法可以做到這一點?

未經測試,但應該可以。竅門是為每個項目生成一個行號

select id, project_id, final_score
from 
(select id, project_id, final_score,
      @rn:= if(@project_id= project_id, @rn+ 1, 1) as rn,
      @project_id:= project_id as pi
  from t,(SELECT @rn:=0) b
  order by project_id, final_score desc) x 
where x.rn<= 100;

這將為您工作。 內部查詢將按project_id生成排名組,然后外部查詢將過濾前100個結果。

注意:如果您具有project_id和score的類似組合,則該方法將無效。 創建了這個小提琴以獲得2個等級。

http://sqlfiddle.com/#!9/9e94d5/1

SELECT id1,
       project_id,
       final_score
FROM
  (SELECT max(t1.id) AS id1,
          t1.project_id,
          t1.final_score,
          count(*) AS rnk
   FROM consultant_project_score t1
   INNER JOIN consultant_project_score t2 ON t1.project_id=t2.project_id
   WHERE t1.final_score<=t2.final_score
   GROUP BY t1.project_id,
            t1.final_score) t
WHERE rnk<=100

這是沒有Group BY並使用self join的概念。 這應該給您正確的輸出

SQL

   SELECT cps2.id, cps2.project_id,  cps2.final_score FROM 
                    (  SELECT DISTINCT project_id FROM  consultant_project_score ) cps1 
                     JOIN  consultant_project_score cps2
                                            ON cps2.id  IN ( SELECT cps3.id FROM consultant_project_score cps3 
                            WHERE cps3.project_id = cps1.projectid  
                             ORDER BY cps3.final_score  DESC LIMIT 100) 
                    ORDER BY cps2.project_id ,cps2.final_score DESC     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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