查询 每个班级英语成绩最高的前两名的记录 原文:https://www.cnblogs.com/hxfcodelife/p/10226934.html select a.Classid,a.English from (select Classid,English,row_number() over(partition by Classid order by English desc) as n from CJ) a where n<=2 另外一种情况:取组内最新的数据select max(cre…
背景:  A表.B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序) 经过百度,发现 row_number() over(partition by a order by b desc)函数可用(需要说明下,order by 必须有缺少会报错),以下是数据环境及结果. 创建数据环境 create table A(ANAME varchar(20)); insert into A values('alan'); insert into A values('Ale…
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符']) 基本查询 mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 |…
row_number() over(partition by 分组字段 order by 排序字段 desc)…
在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记录. 看起来不难的业务,做起来才知道还挺麻烦的,说白了其实就是实现分组后的组内排序,一般不思考的话我们会写出这样的语句: select top 2 English,Classid from CJ group by Classid order by English desc 出现这个错误,应该就明白了…
当使用GROUP BY 分组,默认返回的数据是组中最小的记录即id最小的数据, 当开发中经常会需要分组后将最新的数据放在前面, 为了实现需求,使用了嵌套查询,分别使用order by来排序 SELECT id, from_id, to_id, conversation_id, created_date, has_read, content FROM ( SELECT * FROM message WHERE from_id = 6 OR to_id = 6 ORDER BY created_da…
package com.lixu.qqfenzu; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.facebook.shimmer.ShimmerFrameLayout; import com.romainpiel.shimmer.Shimmer; import com.romainpiel.shimmer.ShimmerT…
group by 分组后 返回的是一个同属性的集合  我们可以遍历该集合…
-- 根据编号分组取第一条数据 select * from table t where t.no=(select max(no) from table t1 where t1.no=t.no) -- 根据编号分组后取第一条数据 SELECT * FROM (SELECT ROW_NUMBER() OVER (partition BY no ORDER BY no) rowId,* from table) t WHERE rowId=1…
问题描述:表如下,如何让这个表按device_id这个字段分组,且组中的每条数据都查寻出来?(假如说这个表名为:devicedata) 错误答案:select * from devicedata GROUP BY device_id 这个sql得到的结果是: 每一组只显示了一条数据, 显然没达到我们的目的. 正确的结果:select * from devicedata GROUP BY device_id, id 查询到的结果: 这样就达到了我们的目的了,将每组中的每条数据都查寻出来了. 解释一…
原文地址:https://codedefault.com/s/how-can-i-retrieve-the-last-record-in-each-group-mysql 问题描述 比如,在MySQL数据库中,有数据表messages和数据记录,如下: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_2 3 A A_data_3 4 B B_data_1 5 B B_data_2 6 C C_data…
修改<常用SQL之日期格式化和查询重复数据>中表test1的创建时间,修改后的测试数据如下: 以姓名分组后提取每组最新创建的记录: SELECT a.* FROM test1 AS a, (SELECT b.`name`, MAX(b.create_time) AS `create_time` FROM test1 AS b GROUP BY b.`name`) AS c WHERE a.`name`=c.`name` AND a.create_time = c.create_time ; 执…
mysql分组取每组前几条记录(排名) 附group by与order by的研究,需要的朋友可以参考下 --按某一字段分组取最大(小)值所在行的数据 复制代码代码如下: /* 数据如下: name val memo a 2 a2(a的第二个值) a 1 a1--a的第一个值 a 3 a3:a的第三个值 b 1 b1--b的第一个值 b 3 b3:b的第三个值 b 2 b2b2b2b2 b 4 b4b4 b 5 b5b5b5b5b5 */ --创建表并插入数据: 复制代码代码如下: create…
昨天老板让我查询项目中(众筹),没人刚发起感召后,前三笔钱的入账时间和金额,这把大哥整懵逼了,group by在某些方面是好使,但这次不能为我所用了,获取第一笔进账是简单,可以用group by 直接获取就好,但是后面的呐,我百度反思后,最终实现,上代码,今天写篇博客,也算是记录一下这个知识点: 获取第一笔进账,我是这么搞得 select o.id,f.createdTime,round(f.money/100,0),sum(f.money) ct from(select *from organ…
select name as 姓名,sum( case when cargo='笔' then 1 else 0 end ) as 笔,sum( case when cargo='橡皮' then 1 else 0 end ) as 橡皮from shopping group by name;…
当group by单独使用时,只显示出每组的第一条记录.如下,未分组时查询出两条记录 SELECT info.id, info.switch_id, info.port_id, info.mac_addr, info.ip, info.rec_time, info.dev_name, info.is_active, info.port_type, info.real_type, cfg.port_describe, cfg.port_value, switchers.name, switcher…
转自:http://blog.163.com/jeson_lwj/blog/static/135761083201052411115783/ --查询每门课程的前2名成绩 CREATE TABLE StudentGrade( stuId CHAR(4), --学号 subId INT, --课程号 grade INT, --成绩 PRIMARY KEY (stuId,subId) ) GO --表中数据如下 INSERT INTO StudentGrade(stuId,subId,grade)…
使用子查询进行查询 SELECT * FROM home_content a WHERE ( SELECT count(id) FROM home_content WHERE class_link = a.class_link AND id > a.id ) <= 2…
--操作日志表 CREATE TABLE [dbo].[JobLog]( [JobLogId] [int] IDENTITY(1,1) NOT NULL, [FunctionId] [nvarchar](20) NULL, [OperateTime] [datetime] NULL, CONSTRAINT [PK_JobLog] PRIMARY KEY CLUSTERED ( [JobLogId] ASC )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPU…
id sid cid 1 1 12 1 23 2 1 以sid分组,最后取cid最大的那一条,以上要取第2.3条 1 方法一: select * from (select * from table order by cid desc) as a group by a.sid 方法二: select a.* from table as a where cid = (select max(cid) from table where a.sid = sid) 方法三: select a.* from…
今天遇到这样一个需求场景,要取出 每一种分类(a,b组合分类) 符合条件的日期(字段c) 距离现在最近的10个日期 的数据 首先想到的是用sql筛选出符合某种条件的所有数据,这样的事情很简单 然后用脚本(python)遍历每一种组合(a,b),然后按日期c倒序排序 取前10 如果拿到这个数据后 还要去hive连表查询其他数据,那么上面的方法就比较麻烦,可能需要再取多次hive 我们有没有sql的方法直接完成这样的事情呢?有的 我们可以用到row_number: with t_rank as (…
SELECT * FROM(                SELECT                     [SPID]                    ,[PH1]                    ,[PH1_Code]                    ,[ProjectName]                     ,ROW_NUMBER() OVER(PARTITION BY [SPID] ORDER BY [SPID]) RowNum             …
SELECT uploaddate ,ptnumber ,instcount FROM ( SELECT ROW_NUMBER() OVER( PARTITION BY uploaddate ORDER BY uploaddate DESC ,instcount DESC ) AS row ,* FROM ( SELECT uploaddate ,ptnumber ,COUNT(*) instcount FROM LtblLog.dbo.instlog201408 GROUP BY upload…
SELECT ID,Name,Class ROW_NUMBER() OVER(PARTITION BY Class ORDER BY ID) as NUM 主要是用到 rownum 里面的 PARTITION BY 函数  使用class分组,id排序 .每个分组查询前9个…
分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助,点击查看教程. 比如查询用户某一天最后一笔交易后的账户余额 SELECT *( SELECT *, row_number () OVER ( partition BY username ORDER BY tradeTime DESC ) rowid FROMtable WHEREtradeDate = '2017-08-31' ) t WHERE rowid = 1;…
测试必备的Mysql常用sql语句,每天敲一篇,每次敲三遍,每月一循环,全都可记住!! https://www.cnblogs.com/poloyy/category/1683347.html 前言 group by 关键字可以根据一个或多个字段对查询结果进行分组 group by 一般都会结合Mysql聚合函数来使用 如果需要指定条件来过滤分组后的结果集,需要结合 having 关键字:原因:where不能与聚合函数联合使用 group by 语法格式 GROUP BY <字段名>[,<…
比如select gid from table group by gid 查询时使用下面的方法查询条数 select count(distinct gid) from table 使用select count(gid) from table group by gid是错误的 这样查询的是分组后 每个组内部的条数…
原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7521278.html: 若有错误,请评论指出,谢谢! 1. 聚合函数(Aggregate Function) MySQL(5.7 ) 官方文档中给出的聚合函数列表(图片)如下: 详情点击https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html . 除非另有说明,否则聚合函数都会忽略空值(NULL values). 2. 聚合函数的使用…
比如说有表devicedata: 问题: 现在我想将devicedata这个表中的数据,先按device_id这个字段分组,然后每组中的数据按时间字段ts从大到小的排列, 如何解决呢? 错误的sql:首先分组,然后order by 排序, select * from devicedata GROUP BY device_id, id ORDER BY ts DESC, 但是这条sql查询得到的结果是: 结果是不仅没排序,而且也没分组. 再尝试一下:用子查询 先用order by将数据排序 然后将…
一.排名 /*普通排名:从1开始,顺序往下排*/ AS rank ) r ORDER BY score; /*并列排名:相同的值是相同的排名*/ SELECT cs.* , CASE WHEN @p=score THEN @r END rank ,@p:=NULL)r ORDER BY score; /*并列排名:相同的值名次相同,与上例中的并列排名不同*/ SELECT city,score,rank FROM ( SELECT cs.*, @c:=IF(@p=score,@c,@r) AS…