SqlSugar 3.分组去重

C#+SqlSugar--秘籍第一宗 不同版本的SqlSugar要用不同格式的连接字符串连不上时先用最原始方法测试.NET 8项目需要额外配置一个开关加密设置是SQL Server新版本的安全要求,就像现在小区都要求刷脸进门一样这样配置后,你的程序就能顺利"开门"访问SQL Server数据库了!DBFirst(数据库优先)是 SQLSugar ORM 框架中的一种开发模式,简单来说就是**"先用数据库,后写代码"**的方式。注意:连接数据库账户需要一定权限才能操作,最好管理员级别的账户1.建表、获取表信息2.修改表操作。 阅读详情

用到的表结构、数据、实体类

方便测试 Demo

Student

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `StudentId` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `SchoolId` int(11) NOT NULL,
  PRIMARY KEY (`StudentId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `student` VALUES (1, 'Zzr', 1);
INSERT INTO `student` VALUES (2, 'Ls', 2);
INSERT INTO `student` VALUES (3, 'Wem', 3);
INSERT INTO `student` VALUES (4, 'Hpf', 4);
INSERT INTO `student` VALUES (5, 'Zzr', 5);
INSERT INTO `student` VALUES (6, 'hpf', 2);
INSERT INTO `student` VALUES (7, 'hpf', 2);
INSERT INTO `student` VALUES (9, 'hpf', 2);
INSERT INTO `student` VALUES (11, 'qwe', 0);
INSERT INTO `student` VALUES (12, 'qwe', 0);
public class Student
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int StudentId { get; set; }
        public string Name { get; set; }
        public int SchoolId { get; set; }

        [Navigate(NavigateType.OneToOne, nameof(SchoolId))]//一对一 SchoolId是Student类里面的
        public School School { get; set; } //不能赋值
    }

Order

DROP TABLE IF EXISTS `order`;
CREATE TABLE `order`  (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `Price` decimal(10, 0) NOT NULL,
  `CreateTime` datetime NULL DEFAULT NULL,
  `CustomId` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

INSERT INTO `order` VALUES (1, 'Cs1', 1, '2022-01-01 00:05:28', 1);
INSERT INTO `order` VALUES (2, 'Cs2', 2, '2022-02-02 00:05:42', 3);
INSERT INTO `order` VALUES (3, 'Cs3', 3, '2022-03-03 00:05:48', 4);
INSERT INTO `order` VALUES (4, 'Cs4', 4, '2022-03-04 00:05:55', 5);
INSERT INTO `order` VALUES (5, 'Cs5', 5, '2022-03-04 00:05:55', 6);
public class Order
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }

        public string Name { get; set; }

        public decimal Price { get; set; }

        [SugarColumn(IsNullable = true)]
        public DateTime CreateTime { get; set; }

        [SugarColumn(IsNullable = true)]
        public int CustomId { get; set; }
    }

1.普通分组查询(用where)

var list1 = db.Queryable<Student>().Where(it => it.StudentId > 2)
               .GroupBy(it => new { it.Name })
               .Select(it => new { Sum =SqlFunc.AggregateAvg(it.StudentId), Name = it.Name }).ToList();

//SELECT AVG(`StudentId`) AS `Sum` , `Name` AS `Name`  FROM `Student`  WHERE( `StudentId` > '2')GROUP BY `Name`

2.聚合对象条件筛选(用Having)

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用

 var list2 = db.Queryable<Student>().GroupBy(it => new { it.Name })
                .Having(it => SqlFunc.AggregateCount(it.StudentId) >= 2)
                .Select(it => new { Sum =SqlFunc.AggregateAvg(it.StudentId), Name = it.Name }).ToList();

//SELECT  AVG(`StudentId`) AS `Sum` , `Name` AS `Name` FROM `Student` GROUP BY `Name`  HAVING (COUNT(`StudentId`) >= 2 )

3.Distinct使用

一般用来指定字段去重复,查询不重复的值,去重字段

var list = db.Queryable<Student>().Distinct().Select(it => new {CsName = it.Name }).ToList();

//SELECT  DISTINCT  `Name` AS `CsName`  FROM `Student`

4.分组获取第一条

4.1 MySql、Sqlite写法

var list = db.Queryable<Student>().GroupBy(it => it.Name).Take(1).ToList();

//SELECT `StudentId`,`Name`,`SchoolId` FROM `Student`   GROUP BY `Name`   LIMIT 0,1

4.2 SqlServer、Oracle写法

var list = db.Queryable<Order>().Take(1).PartitionBy(it=>it.Name).ToList()

//SELECT `StudentId`,`Name`,`SchoolId` FROM `Student`   GROUP BY `Name`   LIMIT 0,1

5.按照年月日分组

按照年、月分组,用 Select 投影出一个匿名对象类型

var list = db.Queryable<Order>()
                .Select(it => new
                {
                    name = it.Name,
                    year = it.CreateTime.Year,
                    month = it.CreateTime.Month
                })
                .MergeTable()
                .GroupBy(it => new { it.year, it.month })//对新表进行分组
                .Select(it => new
                {
                    date = SqlFunc.MergeString(it.year.ToString(), "-", it.month.ToString()),
                    year = it.year.ToString(),
                    month = it.month.ToString(),
                    count = SqlFunc.AggregateCount(it.name)
                }).
                 ToList();

//SELECT  concat(CAST(`year` AS CHAR),'-',CAST(`month` AS CHAR)) AS `date` , 
				CAST(`year` AS CHAR) AS `year` , 
				CAST(`month` AS CHAR) AS `month` , 
				COUNT(`name`) AS `count`  
FROM  (SELECT  `Name` AS `name` , Year(`CreateTime`) AS `year` , Month(`CreateTime`) AS `month`  FROM `Order`  ) MergeTable  
GROUP BY `year`,`month`
  • MergeTable():将查询出来的结果合并成一个新表,如果想查看具体结果,需要加上 .ToList();
  • SqlFunc.MergeString():合并字符串

在这里插入图片描述

6.按照日期分组

var list5 = db.Queryable<Order>().Select(it => new {
                Id = it.Id,
                Name = it.Name,//这儿不能写聚合函数,因没分组
                Price = it.Price,
                CreateTime = it.CreateTime.Date//只取日期
            })
            .MergeTable()//将查询结果转成一个表
            .GroupBy(it => it.CreateTime)
            .Select(it => new { id = SqlFunc.AggregateMax(it.Id),price = SqlFunc.AggregateSum(it.Price), crate = it.CreateTime })
            .ToList();
            
//SELECT  MAX(`Id`) AS `id` , SUM(`Price`) AS `price` , `CreateTime` AS `create`  
//FROM  (SELECT  `Id` AS `Id` , `Name` AS `Name` , `Price` AS `Price` , CAST(`CreateTime` AS DATE) AS `CreateTime`  FROM `Order`  ) MergeTable  
//GROUP BY `CreateTime`

在这里插入图片描述

文档参考:分组去重
文档参考:查询函数

小白成长记(三、SqlSugar的sum用法) SqlSugar的GroupBy和Sum用法 hello,大家好。我是闲齁齁,一枚用发量写代码的程序员。今天我做的功能模块里面涉及到了分组和求和这两个功能,于是我就翻阅了SqlSugar的文档来学习分组查询和使用。但是还是写出来了好多问题,接下来我就把问题和解决方法写出来,来帮小伙伴们避个雷。SqlSugar的官方文档我已经在下面打了出来。 http://www.donet5.com/Home/Doc?typeId=2243 首先按我以往的规矩来,先写接口,接口的代码还是和以前一样,不知道怎么写的小伙伴 阅读详情

相关推荐

SqlSugar实战:多表分组求和避坑指南

本文详细解析了SqlSugar在多表分组求和操作中的常见误区与解决方案,重点介绍了使用MergeTable转换查询的正确姿势,以及处理导航属性分组、分页统计等实际项目中的坑与优化技巧。通过实战案例,帮助开发者高效实现复杂数据统计需求。

weixin_28702105的博客 255

SqlSugar 与 Linq <一>

Where(g => g.Count() > 1)// 取每组多条记录。//1--剔除列表中,每组有多条记录的所有组,保留仅出现一次的所有记录。//4--剔除list2中所有list1。//5--多条记录中,取最新一条。

wenyuhua2的专栏 1069

C# ORM模式之 SqlSugar使用

3、稳定性和技术支持: 虽然不是官方ORM, 但在稳定性上也是有着数年用户积累,如果遇到问题可以在GITHUB提出来,会根据紧急度定期解决;1、高性能:不夸张的说,去掉Sql在数据库执行的时间,SqlSugar是EF数倍性能,另外在批量操作和一对多查询上也有不错的SQL优化;MySql、SqlServer、Sqlite、Oracle 、 postgresql、达梦、人大金仓。2、高扩展性 :支持自定义拉姆达函数解析、扩展数据类型、支持自定义实体特性,外部缓存等;5、创新、持续更新 ,向下兼容。

我的世界我的光彩 9730

sql group by,order by

1、sum(*) 后group by,先分组,然后组内部求和; 2、where 必须在group by前面,筛选where条件再分组; 3、group by 后加order by,先分组再组外部排序; 4、having后加聚合函数(因为where后面不能加聚合函数),where和having可以一起使用。

我是谁 563

(3)建立上下文对象并使用SqlSugar生成实体类

上一篇:(2)CM.Api项目创建Json包装类与数据库操作接口 右键解决方案,新建解决方案文件夹,取名为工具 在工具文件夹下继续新建控制台项目ModelClassBuilder 右键管理安装NuGet程序包,安装 SqlSugar, 中途会有两个弹框(忘记截图了)依次选择“确定”、“我接受” 点击安装 在 ModelClassBuilder下添加类DbContext 先退出 Microsoft Visual Studio, 如下图所示,我用的是navicat数据库管理工具,建立一个新的连

Stephanie17395的博客 4276

SqlSugar是.NET开源ORM框架,由Fructose大数据技术团队维护和更新,是开箱即用最易用的ORM

SqlSugar 是 .NET 开源 ORM 框架,由 Fructose 大数据技术团队维护和更新,是开箱即用最易用的 ORM。优点:低代码,高性能,超简单,功能综合,多数据库兼容,适用产品。真正实现零SQL、ORM表构建、索引和CRUD全部支持。Support.NET 百万大数据写入、更新、子表,并拥有数十亿查询统计成熟的解决方案。支持SAAS完整应用:跨库查询、审计、租户子数据库、租户子表、租户数据隔离。支持低代码+工作流(动态类构建、动态表构建、兼容 CRUD、JSON TO SQL、自定义 XML 等的非实体多库) 。支持 ValueObject、鉴别器、存储库、UnitOfWork、DbContext、AOP

【分组去重】.NET开源 ORM 框架 SqlSugar 系列

🤖 比基础语法稍微复杂的分组去重查询,日常开发中非常常见,强烈建议掌握。💕💕

李赛赛的专栏 2158

ENSP实战:从零搭建企业级路由交换网络(附完整拓扑图+配置代码)

本文详细介绍了如何使用ENSP从零搭建企业级路由交换网络,包括拓扑设计、IP规划、交换机与路由器配置、路由互通测试及常见故障排查。通过完整的拓扑图和配置代码,帮助读者掌握VLAN隔离、静态路由配置等核心技能,解决实际部署中的典型问题。

weixin_29306875的博客 277

3_SqlSugar查询操作

sqlSugar的简单查询,联合查询和复杂查询

Justinyh的博客 2690

Qt开发者必看:QTimer::singleShot的5个实战避坑指南(含lambda和多线程案例)

本文为Qt开发者提供了QTimer::singleShot的5个关键实战避坑指南,涵盖lambda捕获、对象生命周期和多线程安全等核心难点。通过对比错误与正确代码示例,深入解析了如何避免悬空指针、确保线程执行上下文正确以及管理定时任务资源,帮助开发者编写更健壮、可靠的延迟执行代码。

stem5的博客 455

GEO芯片数据下载和探针ID转换(保姆级教程)

R语言安装、GEO芯片数据下载、探针ID转换

qq_43138237的博客 3万+

开源测试_sqlsugar

【代码】开源测试_sqlsugar。

备忘 580

YOLOv8进阶实战:融合SAHI超推理算法,在无人机应用中精准捕捉视频与图片中的微小目标

YOLOv8改进是一种先进的目标检测算法,通过引入辅助超推理算法SAHI推理,使得小目标无法逃避检测。SAHI推理算法结合视频和图片的特点,利用先进的超推理技术,提高了目标检测的准确性和鲁棒性。不仅如此,YOLOv8改进还支持对视频和图片进行实时的目标检测,将检测结果直观地呈现给用户。这一技术的应用范围广泛,可以用于安防领域,提升监控设备的性能和效率;也可以用于无人驾驶领域,实现精准的目标识别和跟踪。总之,YOLOv8改进是一项具有突破性的技术,为目标检测领域带来了重大的进展。

weixin_51988935的博客 802

.Net Core 3.1 配置 SqlSugar4

.Net Core 3.1 配置 SqlSugar4 SqlSugar是一款国产ORM,除了拥有媲美原生的性能 另外还有满足各种需求的功能,简单好用一分钟就能够轻松上手。 公司产品用的是.Net Core 3.1 版本,数据库是SqlServer和SqlLite 相关资源地址: SqlSuagr4:http://www.codeisbug.com/Doc/8 Nuge命令: Net 版本 ...

忧天的杞人 2692

SpringBoot从入门到精通(全)

前言 ==本博文结合软件idea进行主要讲解== **springboot的特性主要有** - 简化 Spring 应用程序的创建和开发过程 - 抛弃了繁琐的 xml 配置过程,采用大量的默认配置简化以及注解反射 - 直接使用 java main 方法启动内嵌的 Tomcat 服务器运行 Spring Boot 程序,不需要部署 war 包文件 **四大核心**分别为自动配置、起步依赖、Actuator和命令行界面

码农研究僧的博客 7万+

科研级实战】YOLOv11 pose部署至RK3588全流程:让姿态估计模型在边缘端毫秒级运行,我来帮你突破人体行为分析落地壁垒

在智慧安防人体行为分析场景中,基于YOLOv11 pose的模型在云端推理单帧耗时150ms,硬件成本超15000元;经本方案部署到RK3588后,单帧推理耗时降至30ms,硬件成本仅4000元,且关键点检测准确率高达93%以上。在运动姿态评估场景,同款技术路径使模型边缘端推理速度提升6倍,姿态分类精度达95%。这意味着,你也能让自己的姿态估计模型在边缘设备上实现的工业化落地,接下来让我们开启从模型训练到端侧部署的实战征程。

m0_71589036的博客 217

【报表查询】.NET开源ORM框架 SqlSugar 系列

在我们实际开发场景中,报表是最常见的功能,业主爸爸们最喜欢对着大屏和报表指点江山。今天介绍如果通过sqlsugar层来处理报表数据。Sql可以方便的创建临时表并且可以将这些临时表进行JOIN操作。Sql可以方便的实现行列互转操作。以上2点用sqlsugar就能很好解决,下面我们将来展示几个最常见的实践示例。以前用原生SQL写报表查询真的太费劲了,现在有了ORM的加持,感觉不要太好。​🎀💎🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀💎🎀。

李赛赛的专栏 6066

Android13无重力感应系统修改触摸屏跟随屏幕显示旋转方向旋转

在实际产品中设计时会移除重力传感器。当设备缺少重力传感器时,系统无法使用该传感器提供的方向数据来确定屏幕旋转的方向。Android 系统中由于移除重力传感器导致的默认显示方向旋转引起触摸屏与屏幕显示不一致问题,主要是由于缺乏方向检测和触摸坐标的正确转换。通过使用替代传感器(如陀螺仪)、手动配置方向、调整触摸事件坐标和 UI 布局,可以解决这个问题。开发者需要确保在设备没有重力传感器的情况下,能够通过其他方法推测方向,并确保触摸事件和 UI 动作能够正确响应设备的旋转。

weixin_35723192的博客 797

sqlsugar使用

sqlsugar简单使用 sqlsugar是一款非常轻量级并且特别强大的ORM,支持常见的关系型数据库(Oracle , sqlserver , MySQL等等等等),本文示例的是SqlServer,其他数据库雷同。sqlsugar属于全自动型ORM,当然,你也可以拼接sql语句查询,下面都有讲解。这里就简单说一下用法,至于有何优势或者说需要更深层的挖掘,可能就需要您更多的摸索了。 winfrom...

Hakim2214的博客 1万+

华为OD机试2025C卷 - CPU调度策略 (C++ & Python & JAVA & JS & GO)

华为OD机试 2025C卷 CPU调度策略,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1293

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SqlSugar 问题记录

/根据ProcessParaName 去重 var distinctData = _db.Queryable<ConfProcessParamModel>() .Distinct() .GroupBy(it => it.ProcessParamName) .Select(it => it.ProcessParamName) .ToList();// 这里是 List<string>,不是 List<ConfProcessParamModel>当使用 Select()时,返回类型由选择的字段决定。

m0_56541793的博客 836

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SqlSugar 3.实体配置

文章目录1.实体使用自带特性1.1 主键自增1.2 双主键、复合主键、联合主键、多个主键1.3 无主键2.实体使用自定义特性3.实体不使用特性4.特性明细 1.实体使用自带特性 对于CURD来说,只需要配置主键和自增列就行;类的名称和数据库表名不同时,也可设置 1.1 主键自增 [SugarTable("dbstudent")]//当和数据库名称不一样可以设置表别名 指定表明 public class Student { [SugarColumn(IsPrimaryKey = true, IsIde

DotNeter-Hpf的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SqlSugar轻量ORM

蓝灯软件数据股份有限公司项目,代码开源。SqlSugar是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法。学习列表 0、功能更新 1、SqlSugar基础应用 2、使用SqlSugar处理大数据 3、使用SqlSugar实现Join 待更新 4、使用SqlSugar实现分页+分组+多列排序 待更新 5、节点故障如何进行主从调换优点:1、优越的性能,查询使用 reflection.emit 创建IL语言+委托绑定 然后对该对象进行 cache ,datarea

月亮哥的专栏 5640

Net Core 3.1 实现SqlSugar多库操作

在开发过程中,会经常用到跨库查询的问题,对于相同类型的数据库,只需要添加一个数据连接,但是对于不同类型的数据库,还需要搭建不同数据库的环境,不论从开发效率还是项目后期维护方面,都是有诸多不便的,那么推荐使用SqlSugar实现多库(多租户)......

liwan09的博客 1万+

SqlSugar动态Group By查询问题解析与解决方案

在数据分析和报表统计场景中,动态Group By查询是开发人员经常遇到的需求。SqlSugar作为一款功能强大的.NET ORM框架,提供了灵活的Group By功能,但在动态构建Group By查询时,开发者往往会遇到各种问题。本文将深入分析SqlSugar动态Group By查询的常见问题,并提供实用的解决方案。 ## 一、SqlSugar Group By基础用法 ### 1.1 基本G...

gitblog_01419的博客 1112
上一篇: SqlSugar 2.分页查询
下一篇: SqlSugar 4.排序用法
DotNeter-Hpf
博客等级 码龄9年 38粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DotNeter-Hpf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值