父子级分类统计分类下数量sql

1

SELECTA.* 
FROM(SELECTA.project_id,COALESCE ( A.category_id, '0' ) category_id,( -- 其它没有查询的分类, 就会是null, 所以会归为其它CASEWHEN COALESCE ( A.category_name, '其他分类' ) = '其他分类' THEN '其他' WHEN COALESCE ( A.category_name, '其他分类' ) = '强电系统' THEN '供配电' WHEN COALESCE ( A.category_name, '其他分类' ) = '电梯升降系统' THEN '升降设备' WHEN COALESCE ( A.category_name, '其他分类' ) = '暖通空调系统' THEN '暖通空调' WHEN COALESCE ( A.category_name, '其他分类' ) = '消防系统' THEN '消防' WHEN COALESCE ( A.category_name, '其他分类' ) = '视频监控系统' THEN '视频监控' WHEN COALESCE ( A.category_name, '其他分类' ) = '出入口门禁控制系统' THEN '门禁停车' WHEN COALESCE ( A.category_name, '其他分类' ) = '停车场管理系统' THEN '门禁停车' WHEN COALESCE ( A.category_name, '其他分类' ) = '动环监测系统' THEN '动环设备' END ) category_name,COUNT( A.ID ) COUNT,COUNT( CASE WHEN A.use_status IN ( '0', '2', '4', '5' ) THEN 1 END ) AS enable_count,COUNT( CASE WHEN A.use_status IN ( '0', '2', '4', '5' ) AND A.COUNT > 0 THEN 1 END ) AS enable_iot_count FROM(SELECTA.project_id,A.ID,A.use_status,b.ID category_id,b.category_name,COUNT( CASE WHEN C.business_type IN ( '0', '1' ) THEN 1 END ) COUNTFROMfacility_ledger ALEFT JOIN (-- 至此, 得到所有所要查询的分类下的所有分类idSELECTA.ID,A.category_name,string_agg ( f.ID, ',' ) stringAggId,A.project_id FROMfacility_category f -- 分类与分类之间存在父子级关系, 难点在于下面想要查询的分类也可能存在父子级关系, -- 也就是说: 1个设备可能属于某2个分类, 并且这2个分类存在父子级关系, -- 比如说: 子级分类的设备肯定属于该子级的父级分类-- 也就说: 这里要考虑设备在这2个分类中要被计算2次的情况LEFT JOIN ( -- 这里找出想要查询的分类SELECTID,route_id,category_name,project_id FROMfacility_category WHEREdelete_flag = 0 AND category_name IN ( '强电系统', '电梯升降系统', '暖通空调系统', '消防系统', '视频监控系统', '出入口门禁控制系统', '动环监测系统', '停车场管理系统' )) A ON A.project_id = f.project_id AND f.route_id LIKE concat ( '%', A.route_id, '%' ) WHEREf.delete_flag = 0 AND A.route_id IS NOT NULL GROUP BYA.project_id,A.ID,A.category_name ) b ON A.project_id :: INTEGER = b.project_id AND b.stringAggId LIKE concat ( '%', A.classification_id, '%' )LEFT JOIN facility_iot C ON A.ID = C.facility_id AND C.delete_flag = 0 WHEREA.delete_flag = 0 AND b.ID IS NOT NULLAND C.id IS NOT NULL GROUP BYA.project_id,A.ID,b.ID b.category_name,ORDER BYCOUNT DESC ) A GROUP BY A.project_id, A.category_id,A.category_name ORDER BY COUNT DESC ) A

2

SELECTproject_id,category_id,category_name,sum( count ) count 
FROM(SELECT -- 对 项目id、设备分类id、设备分类名称 分组 统计dd.project_id,COALESCE ( dd.category_id, '0' ) AS category_id,(CASEWHEN COALESCE ( dd.category_name, '其他分类' ) = '其他分类' THEN '其他' WHEN COALESCE ( dd.category_name, '其他分类' ) = '强电系统' THEN '供配电' WHEN COALESCE ( dd.category_name, '其他分类' ) = '电梯升降系统' THEN '升降设备' WHEN COALESCE ( dd.category_name, '其他分类' ) = '暖通空调系统' THEN '暖通空调' WHEN COALESCE ( dd.category_name, '其他分类' ) = '消防系统' THEN '消防' WHEN COALESCE ( dd.category_name, '其他分类' ) = '视频监控系统' THEN '视频监控' WHEN COALESCE ( dd.category_name, '其他分类' ) = '出入口门禁控制系统' THEN '门禁停车' WHEN COALESCE ( dd.category_name, '其他分类' ) = '停车场管理系统' THEN '门禁停车' WHEN COALESCE ( dd.category_name, '其他分类' ) = '动环监测系统' THEN '动环设备' END) AS category_name,COUNT(*) AS count FROM(SELECTA.project_id,COALESCE ( B.ID, '0' ) AS category_id, -- 每个告警 不属于 指定名称分类时, 指定其分类id为0, 与此同时它的B.categoryName会是nullB.category_name FROM( -- 查询 每个告警 对应具体的 设备分类SELECTfai.project_id,fai.ID,fl.classification_id FROMfacility_alarm_info faiLEFT JOIN facility_ledger fl ON fl.ID = fai.facility_id WHEREfai.alarm_status = '1' fai.modify_time >= CURRENT_DATE AND fai.modify_time < DATE_ADD( CURRENT_DATE, INTERVAL 1 DAY )) ALEFT JOIN ( -- 查询指定设备分类名称 的 设备分类 下的所有设备分类, 并让它们使用逗号拼接;-- 查询指定设备分类名称 的 设备分类 之间可能会存在父子级关系;-- 不同项目的相同设备分类名称的设备分类id一定是不同的;SELECTAA.ID,AA.category_name,GROUP_CONCAT( f.ID SEPARATOR ',' ) AS stringAggId FROMfacility_category fLEFT JOIN ( -- 查询指定设备分类名称 的 设备分类SELECTID,route_id,category_name FROMfacility_category WHEREcategory_name IN ( '强电系统', '电梯升降系统', '暖通空调系统', '消防系统', '视频监控系统', '出入口门禁控制系统', '动环监测系统', '停车场管理系统' ) AND project_id = '1') AA ON f.route_id LIKE CONCAT( '%', AA.route_id, '%' ) WHEREf.delete_flag = 0 AND AA.route_id IS NOT NULL GROUP BYAA.ID,AA.category_name ) B ON FIND_IN_SET( A.classification_id, B.stringAggId ) -- 每个告警 对应的设备分类 并且 对应的设备分类的父级分类上) dd WHEREdd.project_id = '1'GROUP BYdd.project_id,dd.category_id,dd.category_name ) a 
GROUP BYcategory_name

3

SELECTt1.id buildingId,t2.building_name,count(*) alarmCount
FROM(SELECTbu.id building_id,fai.idFROMboard_info_rule_rel birr -- 1个board_info_id 订阅多个 alarm_rule_idLEFT JOIN board_info bi ON birr.board_info_id = bi.ID -- board_info记录了 看板的属性 和 设备id列表-- 应该还需要对fai的id进行分组才行LEFT JOIN facility_alarm_info fai ON birr.alarm_rule_id = fai.rule_id AND FIND_IN_SET( fai.facility_id, bi.facility_scope )LEFT JOIN alarm_rule ar ON birr.alarm_rule_id = ar.ID AND FIND_IN_SET( fai.facility_id, ar.alarm_facility ) -- 除了要在看板允许的设备范围内, 还要属于告警规则的设备范围内LEFT JOIN facility_ledger fl ON fai.facility_id = fl.idLEFT JOIN resource_manage.building bu ON bu.id = fl.position_idWHEREar.delete_flag = 0AND bi.standard_board = '1'AND bi.delete_flag = 0AND bi.STATUS = '1'AND fai.project_id = #{projectId}AND DATE( fai.alarm_time ) = CURDATE()AND fl.position_type = '3' UNION ALLSELECTbf.building_id,fai.idFROMboard_info_rule_rel birrLEFT JOIN board_info bi ON birr.board_info_id = bi.IDLEFT JOIN facility_alarm_info fai ON birr.alarm_rule_id = fai.rule_id AND FIND_IN_SET( fai.facility_id, bi.facility_scope )LEFT JOIN alarm_rule ar ON birr.alarm_rule_id = ar.ID AND FIND_IN_SET( fai.facility_id, ar.alarm_facility )LEFT JOIN facility_ledger fl ON fai.facility_id = fl.idLEFT JOIN resource_manage.building_floor bf ON bf.id = fl.position_idWHEREar.delete_flag = 0AND bi.standard_board = '1'AND bi.delete_flag = 0AND bi.STATUS = '1'AND fai.project_id = #{projectId}AND DATE( fai.alarm_time ) = CURDATE()AND fl.position_type = '4' UNION ALLSELECTbfr.building_id,fai.idFROMboard_info_rule_rel birrLEFT JOIN board_info bi ON birr.board_info_id = bi.IDLEFT JOIN facility_alarm_info fai ON birr.alarm_rule_id = fai.rule_id AND FIND_IN_SET( fai.facility_id, bi.facility_scope )LEFT JOIN alarm_rule ar ON birr.alarm_rule_id = ar.ID AND FIND_IN_SET( fai.facility_id, ar.alarm_facility )LEFT JOIN facility_ledger fl ON fai.facility_id = fl.idLEFT JOIN resource_manage.building_floor_room bfr ON bfr.id = fl.position_idWHEREar.delete_flag = 0AND bi.standard_board = '1'AND bi.delete_flag = 0AND bi.STATUS = '1'AND fai.project_id = #{projectId}AND DATE( fai.alarm_time ) = CURDATE()AND fl.position_type = '5') t1LEFT JOIN resource_manage.building t2 ON t1.building_id = t2.id
GROUP BYt1.building_id,t2.building_name	

4

trim标签与OR结合使用&group_concat新用法

<select id="listFacilityLedgerInMapper"resultType="com.infipark.facility.application.dto.FacilityLedgerExtendDTO">SELECTfl.id,fl.facility_name,fl.project_id,fl.classification_id,fl.classification_code, GROUP_CONCAT(fs.specs_name,":",fs.specs_value order by fs.create_time,fs.id SEPARATOR ';')AS specsGroupfrom facility_ledger flleft join facility_specs fs on fl.id = fs.facility_id and fs.delete_flag = 0<where>fl.project_id = #{param.projectId}AND fl.delete_flag = 0<if test="param.ids != null and param.ids.size() > 0">AND fl.id IN<foreach collection="param.ids" item="id" open="(" close=")" separator=",">#{id}</foreach></if><if test="param.specsIds != null and param.specsIds.size() > 0">AND fl.id IN<foreach collection="param.specsIds" item="id" open="(" close=")" separator=",">#{id}</foreach></if><if test="param.nameKey != null and param.nameKey != ''">AND (fl.facility_name LIKE CONCAT('%',#{param.nameKey},'%')OR fl.classification_code LIKE CONCAT('%',#{param.nameKey},'%')OR fl.position_details LIKE CONCAT('%',#{param.nameKey},'%'))</if><if test="positions != null and positions.size() > 0">AND (<trim prefixOverrides="OR"><foreach collection="positions" item="position" open=" " close=" " separator=" ">OR position_id = '${position[0]}' AND position_type = '${position[1]}'</foreach></trim>)</if></where>group by fl.id
</select>

5

<update id="batchUpdateFacilitySpecs" parameterType="java.util.List"><foreach collection="list" item="item" index="index" separator=";">UPDATE facility_specsSETspecs_value =<choose><when test="item.specsValue != null">#{item.specsValue}</when><otherwise>null</otherwise></choose>,specs_name =<choose><when test="item.specsName != null">#{item.specsName}</when><otherwise>specs_name</otherwise></choose>,create_time = create_timeWHERE id = #{item.id}</foreach></update>

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

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

相关文章

【Unity3D美术】URP渲染管线学习01

扫盲简介 URP渲染管线是Unity3d提供的一种视觉效果更好的渲染模式&#xff0c;类似的还有Built RP&#xff08;默认最普通的渲染模式&#xff09;\ HDRP(超高清&#xff0c;对设备要求高)&#xff0c;视觉效果好&#xff0c;而且占用资源少&#xff01;成为主流渲染管线模式&a…

基于Docker部署GitLab环境搭建

文件在D:\E\学习文档子目录压缩\专项进阶&#xff0c;如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意&#xff1a;一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…

成功案例(IF=7.4)| 代谢组+16s联合分析助力房颤代谢重构的潜在机制研究

研究背景 心房颤动&#xff08;AF&#xff09;是临床上最常见的持续性心律失常&#xff0c;具有显著的发病率和死亡率。高龄是房颤发病率、患病率和进展最显著的危险因素。与年龄在50-59岁之间的参与者相比&#xff0c;80-89岁之间的参与者患房颤的风险增加了9.33倍。目前尚不…

nss刷题(3)

1、[SWPUCTF 2021 新生赛]include 根据提示传入一个file后显示了关于flag的代码 这是一个文件包含&#xff0c;考虑php伪协议&#xff0c;构造payload&#xff1a; ?filephp://filter/readconvert.base64-encode/resourceflag.php 2、[SWPUCTF 2021 新生赛]Do_you_know_http …

Css 提高 - 获取DOM元素

目录 1、根据选择器来获取DOM元素 2.、根据选择器来获取DOM元素伪数组 3、根据id获取一个元素 4、通过标签类型名获取所有该标签的元素 5、通过类名获取元素 目标&#xff1a;能查找/获取DOM对象 1、根据选择器来获取DOM元素 语法&#xff1a; document.querySelector(css选择…

cmake uninstall like

如果有install_manifest.txt cat install_manifest.txt | sudo xargs rm #cat install_manifest.txt | xargs ls建议make install之前查看有没有make uninstall目标

cocos 写 连连看 小游戏主要逻辑(Ts编写)算法总结

cocos官方文档&#xff1a;节点系统事件 | Cocos Creator 游戏界面展示 一、在cocos编译器随便画个页面 展示页面 二、连连看元素生成 2.1、准备单个方块元素&#xff0c;我这里就是直接使用一张图片&#xff0c;图片大小为100x100&#xff0c;锚点为&#xff08;0&#xff0…

ESP32基础应用之使用手机浏览器作为客户端与ESP32作为服务器进行通信

文章目录 1 准备2 移植2.1 softAP工程移植到simple工程中2.2 移植注意事项 3 验证4 添加HTML4.1 浏览器显示自己编译的html4.2 在使用html发数据给ESP324.3 HTML 内容4.4 更新 html_test.html 1 准备 参考工程 Espressif\frameworks\esp-idf-v5.2.1\examples\wifi\getting_sta…

PMapper:助你在AWS中实现IAM权限快速安全评估

关于PMapper PMapper是一款功能强大的脚本工具&#xff0c;该工具本质上是一个基于Python开发的脚本/代码库&#xff0c;可以帮助广大研究人员识别一个AWS账号或AWS组织中存在安全风险的IAM配置&#xff0c;并对IAM权限执行快速评估。 PMapper可以将目标AWS帐户中的不同IAM用户…

Hive环境搭建

1 安装Hive 下载文件 # wget -P /opt/ https://mirrors.huaweicloud.com/apache/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz 解压缩 # tar -zxvf /opt/apache-hive-2.3.8-bin.tar.gz -C /opt/ 修改hive文件夹名字 # mv /opt/apache-hive-2.3.8-bin /opt/hive 配置环境变量 …

torch Embedding 学习笔记

文本向量化&#xff08;Text Embedding&#xff09;&#xff1a;将文本数据&#xff08;词、句子、文档&#xff09;表示成向量的方法。 词向量化将词转为二进制或高维实数向量&#xff0c;句子和文档向量化则将句子或文档转为数值向量&#xff0c;通过平均、神经网络或主题模…

帧动画播放出现oom异常分析及解决

问题描述 需要播放序列帧&#xff0c;帧数特别多的时候会oom 问题分析 源代码每一帧都创建一次bitmap&#xff0c;极度消耗内存 bitmap.recycle并不会立刻回收内存&#xff0c;内存还是会很紧张 问题解决 利用inbitmap&#xff0c;每一帧复用同一片内存区域 //设置Bitmap…

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型

【大模型部署】在C# Winform中使用文心一言ERNIE-3.5 4K 聊天模型 前言 今天来写一个简单的ernie-c#的例子&#xff0c;主要参考了百度智能云的例子&#xff0c;然后自己改了改&#xff0c;学习了ERNIE模型的鉴权方式&#xff0c;数据流的格式和简单的数据解析&#xff0c;实…

软件安装:Linux安装Nginx

软件安装&#xff1a;Linux如何安装软件&#xff0c;程序。 源码安装 类似于.exe 源码包就是一堆源代码程序组成的。 linux tar.gz 这个就是源码包 源码包--------二进制包&#xff0c;源码包里面的代码经过编译之后形成的包。 优点&#xff1a;1、开源&#xff0c;可以二次…

面试八股之MySQL篇1——慢查询定位篇

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

JavaScript 数组方法总结

JavaScript 数组方法总结 创建数组访问和修改数组&#xff08;长度 &#xff06; 元素&#xff09;添加和删除元素数组遍历元素查找过滤和映射归并和缩减数组的连接数组的扁平化数组的排序数组的反转数组的复制数组的测试数组的填充 创建数组 Array.of(...elements): 创建一个…

Singer模型与CT模型状态转移矩阵的求解

Singer模型与CT模型状态转移矩阵的求解 文章目录 Singer模型与CT模型状态转移矩阵的求解前言状态方程矩阵指数函数泰勒展开拉普拉斯变换 Singer模型CT模型 前言 回想起来&#xff0c;第一次接触Singer模型与CT模型时的状态转移矩阵时&#xff0c;对求解过程一知半解。现在&…

linux 上除了shell、python脚本以外,还有什么脚本语言用得比较多?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;说到在 Linux下的编程&#xf…

柯桥成人商务英语“​cold”是“冷”,“shoulder”是“肩膀”,​cold shoulder可不是冷肩膀!

英文中有很多俚语&#xff08;idioms&#xff09;都与身体部位有关&#xff0c;非常有趣。 今天&#xff0c;英语君就为大家介绍一些和身体部位有关的俚语&#xff0c;一起来看看吧&#xff01; cold shoulder “cold shoulder”不能用字面意思理解为“冷肩膀”&#xff0c;我们…