父子級分類統計分類下數量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.pswp.cn/bicheng/14751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14751.shtml
英文地址,請注明出處:http://en.pswp.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;我們…