-- MySQL分组排序取前N条记录的最简洁的单条sql。

USE test;

DROP TABLE IF EXISTS test;

CREATE TABLE test (

id INT PRIMARY KEY,

cid INT,

author VARCHAR(30)

) ENGINE=MYISAM;

INSERT INTO test VALUES

(1,1,'test1'),

(2,1,'test1'),

(3,1,'test2'),

(4,1,'test2'),

(5,1,'test2'),

(6,1,'test3'),

(7,1,'test3'),

(8,1,'test3'),

(9,1,'test3'),

(10,2,'test11'),

(11,2,'test11'),

(12,2,'test22'),

(13,2,'test22'),

(14,2,'test22'),

(15,2,'test33'),

(16,2,'test33'),

(17,2,'test33'),

(18,2,'test33');

INSERT INTO test VALUES  (200,200,'200test_nagios');

SELECT * FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) a

WHERE

N>(

SELECT COUNT(*)

FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) b

WHERE a.cid=b.cid AND a.number)ORDER BY cid,number DESC;

结果如下:

mysql> SELECT * FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) a

-> WHERE

-> 3>(

-> SELECT COUNT(*)

-> FROM (SELECT cid,author,COUNT(*) AS number FROM test GROUP BY cid,author) b

-> WHERE a.cid=b.cid AND a.number)ORDER BY cid,number DESC;

+------+----------------+--------+

| cid | author | number |

+------+----------------+--------+

| 1 | test3 | 4 |

| 1 | test2 | 3 |

| 1 | test1 | 2 |

| 2 | test33 | 4 |

| 2 | test22 | 3 |

| 2 | test11 | 2 |

| 200 | 200test_nagios | 1 |

+------+----------------+--------+

7 rows in set (0.00 sec)

N就是取分组之后的最前面几个判断,N=3就是取前3个

-- 生成自动数字序列

SET @ROW=0;

SELECT a.*,(@ROW:=@ROW +1)Rank

FROM test a;

mysql 全局排序 取第n条_MySQL分组排序取前N条记录 以及 生成自动数字序列 的SQL...相关推荐

  1. [MySQL] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

    前言:         同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.         oracle里面可以通过row_number() OVER (PARTIT ...

  2. .sql文件_Mysql分组排序及Sql文件执行

    最近在做一个临时项目,采用的是mysql开发,主要涉及两个问题:1.一个是传参问题:2.另一个是实现对数据分组取前4的数据.个人感觉很有意义,特此记录一下. 一.传参问题 执行mysql文件,需要从外 ...

  3. mysql分组取所有数据_mysql 分组后取每个组内最新的一条数据

    首先,将按条件查询并排序的结果查询出来. mysql> select accepttime,user,job from tuser_job where user =8 order by acce ...

  4. mysql分组取出每组地一条数据_MySQL 分组后取每组前N条数据

    与oracle的rownumber() over(partition by xxxorder by xxx)语句类似,即:对表分组后排序 创建测试emp表 DROP TABLE IF EXISTS e ...

  5. mysql中实现over partiton by,进行分组排序取topN

    创表 CREATE TABLE `t1` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`class` ...

  6. mysql索引可以提高什么的操作效率_MySQL查询性能优化前,必须先掌握MySQL索引理论...

    数据库索引在平时的工作是必备的,怎么建索引,怎么使用索引,可以提高数据的查询效率.而且在面试过程,数据库的索引也是必问的知识点,比如:索引底层结构选型,那为什么选择B+树? 不同存储引擎的索引的体现形 ...

  7. MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)...

    MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况) MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况) 我的表结构: 先放代码 -- 查询各科成绩前三名的记录(不考虑成绩并列情 ...

  8. mysql查询前20条数据_SQL Server查询前N条记录的常用方法小结

    本文实例讲述了SQL Server查询前N条记录的常用方法.分享给大家供大家参考.具体如下: SQL Server查询前N条记录是我们经常要用到的操作,下面对SQL Server查询前N条记录的方法作 ...

  9. Qt可拖拽排序表格(类似QQ好友分组排序)

    1,简介 为了最佳体验,一个拖拽行排序的功能研究了几个小时.效果参考的QQ好友分组的排序. 网上查了下好像没有人发布QT版类似的代码,于是自己动手 QQ好友分组排序效果: 2,效果 这是最终效果图,有 ...

  10. vue中如何使用vi-for限制遍历的条数?只查询前三条、查询4-6条怎么实现?

    " 大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂. " 前言 今天整理个简单的功能,vue中的v-for如何限制遍历输出的数据,比如我想在一个存放10条数据的集合中只输出3条 ...

最新文章

  1. 程序员必练六大项目:从数据结构到操作系统,计算机教授为你画重点
  2. 洛谷 P4706 取石子 解题报告
  3. 算法题3 寻找丑数数值逼近
  4. 90后,一个即将成为程序员的我
  5. 使用管道符在PowerShell中进行各种数据操作
  6. 渗透测试之通过代码审计打点
  7. Android 如何添加一种锁屏方式
  8. 风林火山最新系统win11 32位旗舰版v2021.07
  9. [BZOJ1798][AHOI2009]Seq维护序列 线段树
  10. iphone如何查看wifi密码_怎么在手机和电脑查看已连接的wifi密码
  11. 通讯录(结尾附全部代码)
  12. JS中Ajax的方法和应用
  13. JAVA实现经纬度转换小数的工具类
  14. 电子地图“顽疾”难治,会“传染”自动驾驶专用高精地图吗?
  15. 电动自行车新国标正式发布,推动电池产业转型升级
  16. 深度学习记录第二篇————Tensor基本操作
  17. w3wp ash oracle,巧妙使用ASH信息
  18. Hashtable的深拷贝
  19. 推荐10款一直在使用的Chrome提效插件
  20. Opencv测量图片中的物体大小

热门文章

  1. mysql的配置步骤
  2. 工作心得_在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?
  3. GIS_GDAL java版下载/环境配置/dll配置/API使用文档
  4. nginx配置虚拟主机-端口号区分/域名区分
  5. Adobe Reader 2019 Offline Installer, Free Download - Best PDF Reader
  6. 【转】HEIF图片存储格式探秘
  7. window 下tomcat 内存设置,bat启动方式的
  8. 【WC2013】糖果公园
  9. onload 事件、DOMContentLoaded事件、DOM加载顺序
  10. Jquery截取中文字符串