-
2022-05-20 17:41:28
方式1:内层使用DISTINCT
SELECT type, senderName, subTitle FROM ( SELECT DISTINCT TYPE AS type, SENDER_USERNAME AS senderName, TARGET_NAME AS subTitle FROM `feed_message` ORDER BY CREATE_TIME DESC ) f GROUP BY type
方式2:添加limit
select id,user_name,user_sex,user_age from ( SELECT id,user_name,user_sex,user_age FROM `user_test` order by user_age limit 100 )A group by A.user_sex
更多相关内容 -
mysql分组排序取第一条数据
2022-02-22 19:45:31mysql 根据一个字段分组,各种排序,然后,取第一条数据 1. 分组字段加排序字段先排序 2. 再按分组字段分组,取第一条即可 with t_picture as( SELECT npi_product_id,is_default_one,update_time, uri FROM ...需求:
mysql 根据某一个字段分组,然后组内排序,最后每组取排序后的第一条数据
1. 先使用(分组字段+排序字段)排序
相当于实现了分组和排序,只是没有取导每组的第一条数据;
2. 再按分组字段分组,取第一条即可
实例如下:
with t_picture as( SELECT npi_product_id,is_default_one,update_time, uri FROM datahub_product_attachment where type=1 ORDER BY npi_product_id,is_default_one DESC,update_time DESC ) SELECT npi_product_id, (ARRAY_AGG(uri))[1] as uri FROM t_picture group by npi_product_id
必须在分组前排序,分组后排序是对分组字段和聚合字段排序。
-
Mysql取分组后的每组第一条数据
2020-12-14 11:00:06Mysql取分组后的每组第一条数据 gruop by 分组后 进行 order by mysql会按照 先分组后排序的形式进行输出 并不能做到每组中的第一条数据取出。 我的思路是 : 先将要查询的数据表转换成已经排序的临时表 在进行 分组... -
MySQL实现分组排序并取组内第一条数据
2022-05-07 22:06:11MySQL分组取组内第一条数据前言
MySQL分组取组内第一条数据
代码实现–这种❌
SELECT * FROM cl_Issue_accessory GROUP BY type_id ORDER BY end_time DESC
select * from cl_Issue_accessory where type_id =2 ORDER BY end_time DESC
检查一下时间排序:
真正的分组,取数据select t.* from ( select * from cl_Issue_accessory cia order by cia.end_time desc limit 1000 ) t group by t.type_id
-
MySQL分组排序取每组第一条(最大值、最小值)
2022-06-10 14:49:54MySQL8.0 Java8建表语句: 数据准备: 随机生成姓名,依次插入模拟数据 自动生成项目地址 巧妙利用mysql的max、min函数,网上流传最多的是下面写法: 这样写有个弊端,limit限制了数据量,对以后的业务扩展都会有...MySQL分组排序
前言
业务场景:student_score是学生的分数表,其中包含id、学生、科目、创建时间、分数字段,现在我们需要进行平均分、最大分数、最小分数等不同纬度的统计。
运行环境:
MySQL8.0
Java8
一、前期准备
建表语句:
CREATE TABLE `student_score` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `student` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '学生姓名', `project` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '科目', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `score` int DEFAULT NULL COMMENT '分数', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `student` (`student`,`project`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
数据准备:
随机生成姓名,依次插入模拟数据
自动生成项目地址
二、统计
1.平均分
select group_concat(distinct student), avg(score) from student_score group by student
2.计算个人最低分
select group_concat(distinct student), min(score) from student_score group by student
3.计算个人最高分
select group_concat(distinct student), max(score) from student_score group by student
总结
巧妙利用mysql的max、min函数,网上流传最多的是下面写法:
select * from (select * from student_score order by score desc limit 1000) a group by a.student
这样写有个弊端,limit限制了数据量,对以后的业务扩展都会有影响
max和min也有弊端:
如图project字段并不是正确的科目,需要根据业务来量身打造sql -
mysql分组排序取每组第一条
2021-07-29 12:05:56表 (5-8秒刷新一次) 取更新时间、采集点编号和最新读数 说明一下 表里面有很多点位数据 然后固定时间insert一次 我需要拿到 最新时间的 所有点位的 数据 create table C010_CURRENT_DATA ( ID varchar(50) not ... -
Mysql之排序分组后取第一条 慢SQL分析
2022-07-21 20:35:56乍一看没什么问题,但是看执行计划,会发现最外面一层的select没有走索引,而是全表扫描,这样随着数据量的增大,必将成为一个慢sql。...需要先根据创建时间倒排,再根据业务id分组,取每个分组的第一条数据。...... -
mysql 分组排序取第一条记录
2020-08-27 16:17:22比如取每个班级成绩第一的学生等等 oracle 和 sqlserver支持函数,mysql不行 这里给一个粗暴的方法: 两个行数 GROUP_CONCAT(A ORDER BY B)和substring_index 思路: 1、GROUP_CONCAT(fA ORDER BY B) 按照... -
MYSQL实现排序分组取第一条sql
2022-07-28 10:53:10mysql知识点实现排序分组 -
mysql实现分组排序并取组内第一条数据
2021-07-20 16:18:45mysql中有一张表用户表user 其中李四是重复数据 id name 1 张三 2 李四 3 李四 4 王五 如何去重实现查询效果为 id name 1 张三 2 李四 4 王五 id为主键,去重之后保留id最小的一条数据 或者可以实现效果为 id name 1 ... -
MYSQL实现分组排序并取组内第一条数据
2020-12-22 01:27:20一、需要实现分组排序并且取组内状态优先级最高的数据有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据第一种写法:select t.* from (select e.* from error_record e where e.status >... -
mysql5.7,分组排序取第一行
2021-06-22 11:39:45防止合并的构造对于派生表和视图引用是相同的: 1.聚合函数( SUM() , MIN() , MAX() , COUNT()等) 2.DISTINCT 3.GROUP BY 4.HAVING 5.LIMIT 6.UNION或UNION ALL 7.选择列表中的子查询 8.分配给用户变量 9.仅... -
oracle和mysql分组排序取第一条数据
2018-12-28 13:34:38查每个人的Orderstr 是1 的数据,并保证name不重复 oracle select * from (SELECT a.*, row_number() over(partition by ida order by orderstr) rn FROM (select orderstr, name, ida from test) a ) where..... -
mysql 分组后再获取组内排序的第一条数据
2020-12-14 17:58:24如图,如果我们按 number 分组后再按 is_bak 从大到小排序获取最大的第一条数据,那么最后结果就是 id 为 1,4,6 这 3 条。 select t.* from ( select distinct(id) as tt,t1.* from a_t as t1 order by is_bak ... -
mysql 分组,组内排序并且取第一条数据
2021-05-12 11:50:21sql 排序 ROW_NUMBER() OVER 函数这是我之前写的sql排序函数,现在的需求是mysql 分组,组内排序并且取第一条数据。 mysql用子查询实现类似于row_number()函数的功能 场景: versionId=0时,是默认版本,即该条记录... -
Mysql 5.7 取分组第一条
2022-07-24 18:33:08mysql 5.7 取分组第一条 -
mysql使用GROUP BY分组实现取前N条记录的方法
2020-09-10 02:16:01主要介绍了mysql使用GROUP BY分组实现取前N条记录的方法,结合实例形式较为详细的分析了mysql中GROUP BY分组的相关使用技巧,需要的朋友可以参考下 -
mysql8 分组排序取第一或者前几
2021-10-13 17:22:26MySQL 8 引入了一个rank()函数,可以更简便的实现排行的功能. 二、实例展示 具体使用: select t.company_id, t.quantity, RANK() OVER(PARTITION BY t.company_id ORDER BY create_ti... -
Mysql和Oracle分组排序取第一条数据
2022-04-07 21:12:40根据name分组根据,根据age排序,取第一条数据 SELECT * FROM (SELECT p.*, row_number() over(PARTITION BY NAME ORDER BY age DESC ) rnk FROM person p)AS a WHERE rnk =1 AND a.name IN ('张三','鸡哥') ... -
MySQL分组排序(取第一或最后)
2021-01-19 23:25:30MySQL分组排序(取第一或最后)方法一:速度非常慢,跑了30分钟SELECTcustid,apply_date,rejectruleFROM(SELECT*,IF( @pkey <> custid, @rank := 1, @rank := @rank + 1 ) AS rank,@pkey := custidFROM... -
MySQL——MySQL分组排序取TopN、取第N条
2020-09-26 14:20:20mysql -
mysql分组排序取前N条记录的最简洁的单条sql !
2021-04-24 20:31:27-- 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... -
mysql取分组的第一条
2021-04-06 11:09:16t_test按照p_id分组,并获取组内表最新创建的数据 SELECT a.name FROM ( SELECT * FROM t_test ORDER BY create_time desc LIMIT 10000) a ...== 这里注意:MYSQL5.7版本的子查询的排序需要加LIMIT排序才有效 == -
基于mysql实现group by取各分组最新一条数据
2020-12-14 07:54:03前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式。 一、准备数据 ... -
mysql分组查询取第一条数据
2021-04-14 10:31:12mysql分组查询取第一条数据 在做项目时遇到了,mysql分组查询取第一个的需求 表结构如下 需求是根据code分组,取每组中版本号最大的数据 方案一 SELECT t.* FROM ( SELECT code, max( version ) AS version... -
mysql分组取每组前几条记录(排名) 附group by与order by的研究
2020-09-11 00:55:24mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 -
MySql 分组排序取时间最大的一条记录
2021-01-18 20:07:35mysql分组取每组前几条记录(排序)首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...mysql分组取每组... -
mysql中sql_mode中的ONLY_FULL_GROUP_BY问题处理+mysql分组排序后取第一个值
2021-07-09 16:19:56在处理一个sql语句要求选择分组中最新的一条数据时,发现网上有一些mysql语句查询字段不在group by中,sql依然可以运行,在我本地运行后日志报错: Caused by: org.b3log.latke.repository.RepositoryException: ...