设计思路

当mysql查询有很多分类时,可能只需要每种分类的前三或者前十的数据,不需要返回所有的结果,所以我们可以给不同种类的数据添加序号,然后通过序号来筛选结果

例:建一张工人工作质量表,用年份和质量来分类

CREATE TABLE `work` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) DEFAULT '' COMMENT '姓名',`years` int(11) DEFAULT 0 COMMENT '年份',`type` varchar(32) DEFAULT '' COMMENT '质量类型: 高 中 低 不合格',`count` int(11) DEFAULT 0 COMMENT '工作量',PRIMARY KEY (`id`),UNIQUE KEY(`name`,`years`,`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

给新建的表添加一些数据

INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('张三', '高', 2020, 0);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('张三', '中', 2020, 200);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('张三', '低', 2020, 200);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('张三', '不合格', 2020, 600);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('李四', '高', 2020, 800);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('李四', '中', 2020, 100);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('李四', '低', 2020, 50);
INSERT INTO `work` (`name`, `type`, `years`, `count`) VALUES ('李四', '不合格', 2020, 50);
INSERT INTO `work` ( `name`, `type`, `years`, `count`) VALUES( '李四', '高', 2018, 100);
INSERT INTO `work` ( `name`, `type`, `years`, `count`) VALUES( '李四', '中', 2018, 200);
INSERT INTO `work` ( `name`, `type`, `years`, `count`) VALUES( '李四', '低', 2018, 500);
INSERT INTO `work` ( `name`, `type`, `years`, `count`) VALUES( '李四', '不合格', 2018, 200);

查询每人每年工作数量前3的数据

1.直接查询

SELECT name,type,years,count FROM work ORDER BY name DESC,years DESC,count DESC

查询的结果发现有很多是不需要的

name type years count
李四 2020 800
李四 2020 100
李四 2020 50
李四 不合格 2020 50
李四 2018 500
李四 2018 200
李四 不合格 2018 200
李四 2018 100
张三 不合格 2020 600
张三 2020 200
张三 2020 200
张三 2020 0

2.添加序号筛选查询(通过数值排序添加序号,再将序号大于3的去除)

SELECT name, type, years, count
FROM (
SELECT CASE
WHEN @name = name
AND @years = years THEN @ordinal := @ordinal + 1
ELSE @ordinal := 1
END AS ordinal, @name := name AS name, @years := years AS years
, type, count
FROM (
SELECT name, type, years, count
FROM work, (
SELECT @ordinal := 0, @name := ‘’
, @years := 0
) t1
ORDER BY name DESC, years DESC, count DESC
) t2
) t3
WHERE ordinal <= 3

查询的结果

name type years count
李四 2020 800
李四 2020 100
李四 2020 50
李四 2018 500
李四 2018 200
李四 不合格 2018 200
张三 不合格 2020 600
张三 2020 200
张三 2020 200

mysql查询所有分类前三的数据相关推荐

  1. MySQL获取每个分类下面的前三条数据

    现在项目遇到个问题,我相册图片里面有很多分类,我想取出每个分类下面的前三条数据,应该怎么做呢? 数据结构如下: DROP TABLE IF EXISTS `t_picture`; CREATE TAB ...

  2. mysql 查询案例dept,emp表内数据

    mysql 查询案例dept,emp表内数据 部门表 员工表 工资等级表 查询案例: 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, – 部门编号 DNA ...

  3. 大数据量 分类统计每个类别的排名前三的数据

    需求: 统计每个类别某项数据排名前几的数据 方案: 1.sql统计 2.sql查询出所有的数据,代码 group 分组取出每个类别的前3个数据 3.sql查询每个类别前3数据,union连接起来 4. ...

  4. Mysql查询某字段值重复的数据个数

    说明:表:survey_consumer,字段:province ,统计字段:count 语句说明:查询出survey_consumer表中province字段两个及以上相同的数据(没有重复的数据不会 ...

  5. Mysql查询各科成绩前三名并分别排序

    Mysql查询各科成绩前三名并分别排序 这个问题是之前1个朋友学mysql他们老师布置的作业,一开始我没有做过,而且刚出来做开发很多学过的东西都忘记了. 表结构如下: 一开始我是这样写的: selec ...

  6. mysql查询总成绩的前3名学生信息

    mysql查询总成绩的前3名学生信息 mysql 8.0+版本 mysql8.0下 mysql 8.0+版本 使用窗口函数 mysql8.0下 select id,STATUS,@rank1 :=@r ...

  7. mysql查询各科成绩前三名的记录,sql查询各科成绩前三名----详述过程,思路清晰不烧脑...

    使用mysql.hive查询各科成绩前三名 一.建表造数据 建表: create table scores( name varchar(100), subject varchar(100), scor ...

  8. mysql查询各科成绩前三名的记录_mysql巧用连表查询各科成绩前三名

    下列是各表的详情,不想自己建表的同学可以直接copy code,数据随意. 创建表成绩详情表: CREATE TABLE score ( id int(10) NOT NULL AUTO_INCREM ...

  9. MySQL 查询最好的前/后3条

    MySQL 查询前/后3条 1 查询SQL 2 学生表 3 成绩表 1 查询SQL select a.`subject`,a.score,s.`name` from score a left join ...

最新文章

  1. python头文件math.h_将常量从.h文件导入到python中
  2. [转]springmvc常用注解标签详解
  3. WeihanLi.Npoi 导出支持自定义列内容啦
  4. JVM对象占用内存计算
  5. (29)FPGA原语设计(差分时钟转单端时钟)
  6. 第十一节(单例模式初步、类的继承)
  7. PATB 1038. 统计同成绩学生(20)
  8. 如果有一个工具可以帮助你将你的代码可视化,你需要吗?
  9. C#读IC卡程序(明华读卡器)
  10. Cocos2dx和Unity3D对比
  11. steps_per_epoch=2000,epochs=100之间的区别
  12. 5G技术发展的发展现状,未来发展有哪些关键点和趋势
  13. JQ对复选框全选、获取复选框的值、回选
  14. 从“老婆”到“俞渝”,李国庆5377条微博透露出了多少秘密?
  15. 深圳市区块链电子发票系统累计开票超5800万张
  16. Web(前端开发)结合html、css、js写一个简单的相册
  17. NoneBot2,基于Python的聊天机器人
  18. 杭州富阳科目三:考试笔记
  19. css复杂的背景图案(网格、波点、棋盘)
  20. 云上中国年,阿里云CDN猪年春节高峰流量再创新高

热门文章

  1. 关于奇迹私服发布站程序的使用说明
  2. Linux烤机脚本测试io,烤机轻松压到56度!RTX3060 iCraft OC评测
  3. Topaz Gigapixel AI 5.3.1 智能图像无损放大软件汉化版
  4. 关于solidworksPDM插件的制作
  5. 量化分析(8)——唐安奇通道
  6. Django框架(五) 用户名密码登录
  7. 我的博客今天3岁92天了,我领取了精英博主徽章_亮仔_新浪博客
  8. 【洛谷】【P1010题解】 [NOIP1998 普及组] 幂次方
  9. Django-MTV模型
  10. 论文笔记 | China‘s Closed Pyramidal Managerial Labor Market