• 关于sqlsugar使用sql函数问题


    环境: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语句基本一致。

    原始视图:

    结果如图示:

  • 相关阅读:
    51nod 1174 区间最大值(RMQ and 线段树)
    Round #447(Div 2)
    51nod 2006 飞行员匹配
    75.Java异常处理机制throws
    74.Java异常处理机制
    emmm
    数据库关系代数
    汇编实验二 2进制转16进制
    汇编实验一 显示字符串
    JustOj 1386: 众数的数量
  • 原文地址:https://www.cnblogs.com/zhao-y/p/12133610.html
Copyright © 2020-2023  润新知