程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 分組後查找每組的前N條記錄語句

分組後查找每組的前N條記錄語句

編輯:MySQL綜合教程


分組後查找每組的前N條記錄語句   Java代碼   考你一條sql語句   如有表 student    id  name age  class    1   張1   15     1   2   張2   15     1   3   張3   15     1   4   張4  15     2   5   張5   15     2   6   張6   15     2   7   張7   15     3   8   張8   15     3   9   張9   15     3   10   張10   15     5   11   張11   15     5  
  現在想得到每個班級的前2名學生資料     根據題意是,按class分組,然後取id靠前的兩名,相信大多數人都能想到基本組合:    www.2cto.com   SELECT a.*    FROM student a    ORDER BY a.class, a.id;    另加:Limit 0,2來配合。    (注:MYSQL 中沒有top n的寫法,取代的是LIMIT。)    Limit 0,n只能取到最前的n位,但如何能取到每個班的前兩位呢,就無從下手了。    下面我來具體分析一下這題的解法:    1、獲取每個class的前兩位:    SELECT a.*    FROM student a    WHERE    (    www.2cto.com     SELECT COUNT(*)      FROM student      WHERE class = a.class      AND id < a.id    ) < 2    #遍歷所有記錄,然後取該條記錄與同班中的所有記錄比較,只有當班上不超過兩個人(含兩個人)比該記錄id小的話,該記錄才被認定為該記錄id排名前2,然後顯示出來。    2、當獲取所有合格的數據有,按class與id排序:    在最後添加:    www.2cto.com   ORDER BY a.class, a.id;    最終結果:    SELECT a. *  FROM student a  WHERE (    SELECT COUNT( * )  FROM student  WHERE class = a.class  AND id < a.id  ) <2  ORDER BY a.class, a.id  LIMIT 0 , 30;    遍歷所有記錄,然後取該條記錄與actionid中的所有記錄比較,只有id不超過1個比該記錄id小的話,該記錄才被認定為該記錄id為最大id,然後顯示出來。    www.2cto.com   Java代碼    SELECT a.*   FROM messagesend a   WHERE (   SELECT COUNT( * )   FROM messagesend t   WHERE t.actionid = a.actionid   AND id < a.id   ) <1  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved