【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

news2024/11/16 12:26:19

欢迎来到《小5讲堂》,大家好,我是全栈小5。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • 创建表
  • 模拟数据
  • 分组查询
    • 城市分组
    • 城市区县分组
    • 代理商维度
    • 不同代理
  • 小知识点
    • identity
    • 删除数据
    • 分组查询原则
  • 文章推荐

前言

最近在做数据修改,有时候太久没写sql语句,突然想通过子查询的方式去批量更新数据的时候,
还是有点不知所措,那就一步一步来吧,也写篇文章梳理和总结下,毕竟也是基本的操作加深印象。
在做数据批量修改时,有个关键点,就是分组查询后找出另外一个字段不同值得记录,因此本篇文章就针对这个查询梳理一遍。

创建表

假设有一张表,有三个主要字段,城市名称、区县名称、代理商名称。
创建表时,习惯性给表加一个id编号,并且是自增字段,有个序号感觉看起来舒服,hhh~~~

create table test_name
(
    id int identity(1,1),        -- 自增编号
    city_name nvarchar(50),        -- 城市名称
    area_name nvarchar(50),        -- 区县名称
    agent_name nvarchar(50)        -- 代理商名称
)

模拟数据

insert into test_name(city_name,area_name,agent_name) values
('广州市','白云区','张三'),
('广州市','白云区','张三'),
('广州市','白云区','李四'),
('广州市','白云区','王五'),
('深圳市','龙岗区','张三')

上面是一次性添加多条,所以只需要写一个values即可,也可以分开写。
分开写后,就能看出来重复啰嗦,所以才会有一些简写的方式。

insert into test_name(city_name,area_name,agent_name) 
values
('广州市','白云区','张三')

insert into test_name(city_name,area_name,agent_name) 
values('广州市','白云区','张三')

insert into test_name(city_name,area_name,agent_name) 
values('广州市','白云区','李四')

insert into test_name(city_name,area_name,agent_name) 
values('广州市','白云区','王五')

insert into test_name(city_name,area_name,agent_name) 
values('深圳市','龙岗区','张三')

分组查询

城市分组

select city_name from test_name group by city_name

在这里插入图片描述

城市区县分组

select city_name,area_name from test_name group by city_name,area_name

在这里插入图片描述

代理商维度

城市、区县、代理商,三者组合唯一查询

select * from test_name
select city_name,area_name,agent_name from test_name group by city_name,area_name,agent_name

在这里插入图片描述

不同代理

同城市区县,但不同代理商的记录。

select city_name 城市,area_name 区县,count(agent_name) 过滤前代理商数量,count(distinct agent_name) 过滤后代理商数据
from test_name 
group by city_name,area_name
having count(distinct agent_name)>1

在这里插入图片描述

小知识点

identity

在 SQL Server 中,Identity 是一种特殊的属性,用于指定某一列是自动生成的数字列。
通过设置 Identity 属性,可以让 SQL Server 自动生成唯一的数字值,并自动填充到指定的列中。
这样可以很方便地为表中的每一行生成一个唯一的标识符。
在创建表时,可以通过以下语法向列添加 Identity 属性:

CREATE TABLE your_table
(
    column_name INT IDENTITY(1,1) PRIMARY KEY,
    -- other columns
);

在这个例子中,column_name 是指定了 Identity 属性的列名,INT 是数据类型,IDENTITY(1,1) 表示以1为起始值,1为递增值自动为每个新行生成一个唯一值,PRIMARY KEY 用来指定此列为主键。
当插入数据时,不需要为 Identity 列指定具体的值,数据库会自动生成并填充对应的值。如果需要获取自动生成的 Identity 值,可以使用 SCOPE_IDENTITY() 函数或者 @@IDENTITY 系统变量。

删除数据

基于上面自增编号知识点,来了解下delete和truncate删除数据的最大区别
delete 表名 可按条件删除或者批量删除记录,并且自增id编号会继续从当前记录值开始算,比如最新编号为10,即使删除编号10的记录,那么新插入一条记录,编号为11
truncate table 表名,全表删除,id自增编号重新开始从1或者指定规则计算

分组查询原则

选择列表中的列 ‘test_name.area_name’ 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
基本原则就是,查询的字段值必须要在分组里,否则无效。
在这里插入图片描述

文章推荐

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

【数据库】Sql Server数据迁移,处理自增字段赋值

【数据类型】C#和Sql Server、Mysql、Oracle等常见数据库的数据类型对应关系

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1480837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解计算机系统笔记

1.1 嵌套的数组 当我们创建数组的数组时,数组分配和引用的一般原则也是成立的。 例如,声明 int A[5][3]; 等价于下面的声明 typedef int row3_t[3]; row3_t A[5] 要访问多维数组的元素,编译器会以数组起始为基地址, (可能需…

教你快速认识Java中的继承和多态

目录 继承 继承的概念 继承的语法 父类成员访问 在子类方法中或者通过子类对象访问父类成员变量时: 在子类方法中或者通过子类对象访问父类成员方法时: super关键字 子类构造方法: 代码块执行顺序: 多态 多态的实现条件 重写 重…

MySql安全加固:配置不同用户不同账号禁止使用旧密码禁止MySql进程管理员权限

MySql安全加固:配置不同用户不同账号&禁止使用旧密码&禁止MySql进程管理员权限 1.1 检查是否配置不同用户不同账号1.2 检查是否禁止使用旧密码1.3 禁止MySql进程管理员权限 💖The Begin💖点点关注,收藏不迷路&#x1f496…

shell自定义日志输出函数log

Background 在编写比较复杂的脚本时,需要输出相关日志信息,方便知悉脚本的执行情况以及问题的排查。 源码 log.sh # 自定义日志函数 function log(){if [[ $1 "i" || $1 "info" ]]; thenecho -ne "\033[1;34mINFO: \033[0m&…

使用Python操作SQLite数据库

大家好,在数据涌现的今天,数据库已成为生活中不可或缺的工具。Python作为一种流行的编程语言,内置了多种用于操作数据库的库,其中之一就是SQLite。SQLite是一种轻量级的关系型数据库管理系统,它在Python中的应用非常广…

c++异常机制(6) -- 标准库中的异常类

标准程序库异常 我们使用c标准库中的异常类&#xff0c;来实现我们之前文件拷贝的代码。 #include <iostream> #include <stdlib.h> #include <exception> #include <ios>using namespace std;#define BUFFER_SIZE 1024// 将一个文件中的内容拷贝到另…

python中版本,操作系统等问题汇总

1. linux源码部署到windows 1.1ModuleNotFoundError: No module named pwd 这个问题&#xff0c;是因为源码是给linux的。这里在windows中&#xff0c;没有该命令。 解决方法之一&#xff0c;在相应的环境目录中&#xff0c;如图中<MetaGPTenv>虚拟环境中&#xff0c;在…

makefileGDB使用

一、makefile 1、make && makefile makefile带来的好处就是——自动化编译&#xff0c;一旦写好&#xff0c;只需要一个make命令&#xff0c;整个工程完全自动编译&#xff0c;极大的提高了软件开发的效率 下面我们通过如下示例来进一步体会它们的作用&#xff1a; ①…

今日arXiv最热大模型论文:点击即可播放!港中文发布大模型写歌神器!

一首歌&#xff0c;包含作词作曲两个部分。擅长作词or作曲就已经很牛了。比如方文山是周杰伦的御用作词人&#xff0c;而周杰伦写过很多耳熟能详的曲子。而兼具作词作曲才华的全能创作人却是难得一见。 最近港中文发布了一款歌曲创作大模型SongComposer&#xff0c;作词作曲都…

Pegasus智能家居套件样例开发--软定时器

样例简介 此样例将演示如何在Pegasus Wi-Fi IoT智能家居套件上使用cmsis 2.0 接口进行定时器开发。 工程版本 系统版本/API版本&#xff1a;OpenHarmony 3.0 releaseIDE版本&#xff1a;DevEco Device Tool Release 3.0.0.401 快速上手 准备硬件环境 预装windows系统的PC…

uniapp项目申请短信模板临时Nginx配置

现在申请短信模板不允许有变量&#xff0c;且要指向实际业务网站&#xff0c;因为项目是小程序&#xff0c;用uniapp写的&#xff0c;现在申请短信&#xff0c;把uniapp打包成h5项目&#xff0c;上传至服务器&#xff0c;修改niginx配置中springboot项目部分&#xff0c;记录一…

Netty之ChannelHandlerMask详解

Netty的ChannelHandlerMask是用于标记ChannelHandler的位掩码。它被用于指示ChannelHandler的事件处理方式。ChannelHandlerMask 定义了ChannelHandler所有事件。 final class ChannelHandlerMask {static final int MASK_EXCEPTION_CAUGHT 1;static final int MASK_CHANNEL_…

前端src中图片img标签资源的几种写法?

在 Vue 项目中引用图片路径有几种不同的方法&#xff0c;具体取决于你的项目结构和配置。以下是几种常见的方式&#xff1a; 1. 静态资源目录 (Public) 如果你的图片放在了项目的 public 目录下&#xff08;例如&#xff0c;Vite 和 Create Vue App 脚手架工具通常使用这个目…

关于页面置换算法的例题(2)

考虑一个500字的程序的下述逻辑地址访问序列&#xff1a;10&#xff0c;11&#xff0c;104&#xff0c;170&#xff0c;73&#xff0c;309&#xff0c;185&#xff0c;245&#xff0c;246&#xff0c;434&#xff0c;458&#xff0c;364。假定采用页式虚拟内存管理&#xff0c;…

力扣hot100题解(python版41-43题)

41、二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,20],[15,7]]示例…

理解C#里面的集合有哪些?怎么用,什么是安全集合?

介绍 在C#中&#xff0c;集合是一种用于存储和操作多个元素的数据结构。它们提供了各种操作&#xff0c;如添加、删除、查找等&#xff0c;以及遍历集合中的元素。集合通常根据其实现方式和行为特征进行分类。 集合继承IEnumerable 在C#中&#xff0c;几乎所有的集合类型都实现…

uniapp同步将本地图片转换为base64,支持微信、H5、APP

接上篇&#xff0c;少了一个方法的源代码。 先上代码&#xff1a; ploadFilePromiseSync (url) > { return new Promise((resolve, reject) > { // #ifdef MP-WEIXIN uni.getFileSystemManager().readFile({ filePath: url, encoding: base64, success: res > { let …

TVM 和模型优化的概述(1)

文章目录 1. 从 Tensorflow、PyTorch 或 Onnx 等框架导入模型&#xff08;model&#xff09;。2.翻译成 Relay3. lower 到 张量表达式。4. 使用 auto-tuning 模块 AutoTVM 或 AutoScheduler 搜索最佳 schedule。5. 选择最佳配置进行模型编译。6. lower 到 TIR。7. 编译成机器码…

【JavaScript】面试手撕节流

引入 上篇我们讲了防抖&#xff0c;这篇我们就谈谈防抖的好兄弟 – 节流。这里在老生常谈般的提一下他们两者之间的区别,顺带给读者巩固下。 PS: 开源节流中节流与这个技术上的节流&#xff0c;个人认为本质上是一样的。 开源节流的节流指的是节省公司的金钱开支。前端技术上的…

#stm学习总结 (二十八)硬件随机数实验

28.1 随机数发生器简介 STM32F407 自带了硬件随机数发生器&#xff08;RNG&#xff09;&#xff0c;RNG 处理器是一个以连续模拟噪声为基础的随机数发生器&#xff0c;在主机读数时提供一个 32 位的随机数。 28.1.1 RNG 框图 STM32F407 的随机数发生器&#xff08;RNG&#x…