关于sqlsugar使用sql函数问题

摘要:
GROUP_CONCAT(tabledevice.hardware state)AS“硬件状态集”FROM(SELECT.UserIdAS“设备编号”,eState.E_value)AS“设备的硬件状态”LEFTJOINEquipmentstateeStateONE。UserId=eState。UserId)AStabledeviceGROUPBYtabledevice。设备编号;

环境:mysql数据库链接 

需求:想统计数据库中的设备号,设备状态,以及设备中子设备的状态 。

分别为俩个表:

1.设备表:设备号(userId),状态 (State)

2.自设备表:设备号(userId),子设备类型(E_type),  子设备状态 (Evalue)

解决方案:

1>使用Sql语句解决

SELECT
  tabledevice.设备编号,
  tabledevice.`终端状态 `,
  GROUP_CONCAT(tabledevice.硬件状态) AS '硬件状态集合' 
FROM (SELECT
    e.UserId AS '设备编号',
    e.State AS '终端状态 ',
    CONCAT(eState.E_type, ":", eState.E_value) AS '硬件状态'
  FROM equipment e
    LEFT JOIN equipmentstate eState
      ON e.UserId = eState.UserId
  ) AS tabledevice
GROUP BY tabledevice.设备编号;

使用Join left  根据 userId链接俩个表,并将字段CONCAT(eState.E_type, ":", eState.E_value)  将硬件类型和状态拼接起来  得到的表数据 重命名为 表tabledevice

然后将表分组 ,分别统计为 UserId State 和状态集合、

注意 GROUP_CONCAT() 是将当前整个分组集合中的某一列,拼成一行数据。如果未分组,则默认整个表某一列全部拼在一起

2>使用SqlSugar解决

还是自己看文档不够认真找了几遍,没找到原生函数。

原本以为:会像数据类型转换一样,使用 SqlFunc 去转换数据。结果没有。哈哈

实际是SqlSugar  可以简介使用sql函数的。

例如:

List<StudentGroup> list9 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).Select<StudentGroup>("Sex,count(*) Count").ToList();

恍然大悟, 一下子清楚了。使用sqlsugar解决上面的数据需求

         var res = db.Queryable<Get_Equipment, Get_EquipmentStateDta>((s1, s2) => new object[] {
                     JoinType.Left ,s1.UserId==s2.UserId
                    }
                   ).Select<Get_Equipment>("s1.UserId,State, CONCAT(s2.E_type, ":", s2.E_value) as hardState");

                    var data = db.Queryable(res).Select<Get_Equipment>("UserId,State,GROUP_CONCAT(hardState) as hardList "
                    ).GroupBy(s1 => s1.UserId).ToList();

数据过滤方式和使用sql语句基本一致。

原始视图:

关于sqlsugar使用sql函数问题第1张

结果如图示:

关于sqlsugar使用sql函数问题第2张

免责声明:文章转载自《关于sqlsugar使用sql函数问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Selenium+python --定位下拉列表框并选取内容Spring Cloud和Spring Boot版本问题导致Nacos 注册失败!下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Java虚拟机4】Java内存模型(硬件层面的并发优化基础知识--缓存一致性问题)

前言 今天学习了Java内存模型第一课的视频,讲了硬件层面的知识,还是和大学时一样,醍醐灌顶。老师讲得太好了。 Java内存模型,感觉以前学得比较抽象。很繁杂,抽象。 这次试着系统一点跟着2个老师学习一下。 学习Java内存模型目的: 1.高并发情况下,java内存模型是怎么提供支持的? 2.一个对象创建后,在内存中的布局? 为什么在聊JVM内存模型、ha...

Tomcat系列(6)——Tomcat处理一个HTTP请求的过程

Tomcat的架构图                图三:Tomcat Server处理一个HTTP请求的过程 处理HTTP请求过程 假设来自客户的请求为:http://localhost:8080/test/index.jsp 请求被发送到本机端口8080 1、用户点击网页内容,请求被发送到本机端口8080,被在那里监听的Coyote HTTP/1.1...

FreeBSD查看带宽占用情况,CPU,硬盘IO 虚拟内存等命令

FreeBSD查看带宽占用情况,CPU,硬盘IO 虚拟内存等命令 来源 https://www.liurongxing.com/freebsd-tips.html 来源 http://blog.51cto.com/wjcaiyf/1597030 1.查看CPU型号:sysctl -a |grep hw.model 2.查看CPU核心数sysctl -a |...

Linux 内核:设备驱动模型 平台设备驱动

介绍 Linux系统的驱动框架主要就是三个主要部分组成,驱动、总线、设备。 随着电子行业的发展,控制器越来越强大,SOC(片上系统)出现了:在片内的CPU外围集成很多外设电路,这些外设都挂接在SOC内部的总线上。 不同于IIC、SPI和USB等这一类实际存在外部PCB走线总线,片内外设从Chip之外是看不到的。 为了统一驱动架构抽象,所以Linux从2.6...

操作二进制数据

 操作二进制数据在数据库编程中,往往需要把二进制数据保存到数据库。这些二进制数据有Word文件、PDF文件、图片文件、声音文件、可执行文件等。二进制数据在不同的SQL服务器中表示方法不同。SQL Server使用Binary类型表示二进制数据,Oracle使用Blob(大二进制对象)类型表示。在JDBC中操作二进制对象和其他数据类型有所不同,二进制对象通常...

SQLSERVER TRUNCATE 运用

SQLSERVER TRUNCATE DELETE DROP运用 TRUNCATE TABLE删除表中的所有行,而不记录单个行删除操作。 语法TRUNCATE TABLE name 参数name 是要截断的表的名称或要删除其全部行的表的名称。 注释TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全...