合并求取分组记录的第一条数据
时间:2022-04-28
本文章向大家介绍合并求取分组记录的第一条数据,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
有朋友问,
关于电影记录的查询SQL,突然不知道如何下手,给个提示参考一下啊,谢谢。
比如,table_mv 表记录电影的基础信息,包括三个字段 名称,链接,归类
变形金刚第一部 电影链接1 归类(变形金刚)。 变形金刚第二部 电影链接2 归类(变形金刚)。 变形金刚第三部 电影链接3 归类(变形金刚)。 终结者 电影链接A 归类。
在查询时规则如下,如果归类为空,则正常,如果归类有值,则汇总, 名称为归类名称,连接默认为第一个, 查询结果为:
变形金刚 电影链接1 归类(变形金刚)。 终结者 电影链接A 归类。
---------------------------------
当时初略的想了想,可以用分组取出来,但写了下又不行,于是按照需求,创建一个表并且插入数据来测试:
CREATE TABLE MovieInfo
(
Name varchar(50) not null,
Link varchar(250) not null,
MovieType varchar(20)
)
GO
INSERT INTO MovieInfo VALUES ('变形金刚第一部','电影链接1','变形金刚');
INSERT INTO MovieInfo VALUES ('变形金刚第二部','电影链接2','变形金刚');
INSERT INTO MovieInfo VALUES ('变形金刚第三部','电影链接3','变形金刚');
INSERT INTO MovieInfo VALUES ('终结者','电影链接A',NULL);
INSERT INTO MovieInfo VALUES ('英雄','电影链接A1',NULL);
INSERT INTO MovieInfo VALUES ('007第一部','电影链接11','007');
INSERT INTO MovieInfo VALUES ('007第二部','电影链接12','007');
INSERT INTO MovieInfo VALUES ('007第三部','电影链接13','007');
GO
SELECT * FROM MovieInfo;
先写一个分组并求分组后的记录大于1的查询:
select MovieType from MovieInfo
where MovieType is not null
group by MovieType
having count(*) >1
结果是:
MovieType
007
变形金刚
根据这个查询可以进一步取到对应的名字:
select top 1 MovieType, Name from MovieInfo where MovieType in
(
select MovieType from MovieInfo
where MovieType is not null
group by MovieType
having count(*) >1
)
group by MovieType,Name
无奈结果不是预期的那样,只有1条记录:
MovieType Name
007 007第二部
在同事的指导下,说ROW_NUMBER() 可以在给记录编号的同时指定分组,然后我们取分组中编号为1的记录即可,先来分组编号,看看记录情况:
SELECT ROW_NUMBER() OVER(partition by MovieType ORDER BY Name) as row, * FROM MovieInfo WHERE MovieType is not null
结果是:
row Name Link MovieType
1 007第二部 电影链接12 007
2 007第三部 电影链接13 007
3 007第一部 电影链接11 007
1 变形金刚第二部 电影链接2 变形金刚
2 变形金刚第三部 电影链接3 变形金刚
3 变形金刚第一部 电影链接1 变形金刚
OK,现在可以给出完整的查询了,这个查询需要用到联合查询,统计那些没有分组的记录:
select Name,Link,MovieType from (
SELECT ROW_NUMBER() OVER(partition by MovieType ORDER BY Name) as row, * FROM MovieInfo WHERE MovieType is not null
) t
where t.row=1
union
SELECT Name,Link,MovieType FROM MovieInfo WHERE MovieType is null
结果是:
Name Link MovieType
007第二部 电影链接12 007
变形金刚第二部 电影链接2 变形金刚
英雄 电影链接A1 NULL
终结者 电影链接A NULL
后来想想,如果没有Row_Number 怎么办?同事说可以利用聚合函数或者自查询,下面是给出的2条SQL语句,功能一样:
select * from MovieInfo a where name=(select MIN(name) from MovieInfo where MovieType=a.MovieType)
select * from MovieInfo a where name=(select TOP 1 name from MovieInfo where MovieType=a.MovieType)
由于常常使用ORM,很久没有练习SQL了,这里做一个笔记,感谢同事的指导。
下面是我今天练习这个SQL查询的PDF.NET集成开发工具,该工具可以在官网找到下载链接。
- 时过境迁:Oracle跨平台迁移之XTTS方案与实践
- Kazoo Python Zookeeper 选主
- Linux Redis集群搭建与集群客户端实现
- python使用上下文管理器实现sqlite3事务机制
- python服务端多进程压测工具
- 响应式js幻灯片代码一枚
- 使用深度学习检测面部特征,让实时视频聊天变得更有趣
- springboot 注册服务注册中心(zk)的两种方式
- 极速体验:Oracle 18c 下载和Scalable Sequence新特性
- springboot mybatis 事务管理
- Elasticsearch JAVA api轻松搞定groupBy聚合
- 微信加关注链接 一键关注公众号 解决用手机看网页无法扫二维码的烦恼
- springboot mybatis redis 二级缓存
- Elasticsearch强制重置未分配的分片(unassigned)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 猿思考系列4——一文学会java的斗转星移动
- 猿思考系列5——一文明白java和微商那点儿事儿
- 猿思考系列8——缓存的套路也就这些
- 猿思考系列9——一文获取隐藏逻辑挖掘办法
- 猿蜕变系列1——春天的故事
- 猿蜕变系列2——一文搞懂spring的花式DI
- 猿蜕变系列3——SpringMVC之初体验
- 猿蜕变4——一文获取web框架正确学习套路
- 猿蜕变系列5——一文搞懂Controller的花式编写
- 猿蜕变系列6——一文掌握springMVC必会技巧
- ModuleNotFoundError: No module named ‘__main__.XX‘;
- 猿蜕变系列7——也说说springMVC上传姿势
- 猿蜕变系列8——一文搞懂Interceptor操纵姿势
- 猿蜕变9——一文搞定SpringMVC的RESTFul套路
- 猿蜕变10——一文学会ORM的正确打开姿势