樓主在做一個智慧工地的產品,需要對工人進行一些數據統計,比如要統計導入人員數量小於30的工地,SQL應該怎么寫呢?
首先了解一下數據結構,工地分三張表,四級層級關系,Organization表存儲區域、城市兩級,Projects表存儲項目,Stages表存儲分期;還有一個worker表存儲人員。這4張表外鍵分別保存的上級表的id。
要查出工人小於30的工地大體步驟如下:
1、找出小於30人的工地分期id;
2、根據分期id外連接查出對應的工地全稱;
3、根據工地的4級進行分組排序。
具體SQL如下:
SELECT org.NAME 區域名稱, city.NAME 城市名稱, pr.projectName 項目名稱, st.stageName 分期名稱, ws.wcount 工人數量 FROM Stages st LEFT JOIN Projects pr ON st.projectMdid = pr.projectMdid LEFT JOIN Organization city ON city.mdid = pr.bizOrgMdid LEFT JOIN Organization org ON org.mdid = city.parentMdid LEFT JOIN ( SELECT w.stageMdid stageMdid, count( * ) wcount FROM worker w WHERE w.deleteflag = 0 GROUP BY w.stageMdid ) ws ON st.stageMdid = ws.stageMdid WHERE st.stageMdid IN ( SELECT w.stageMdid FROM worker w WHERE w.deleteflag = 0 GROUP BY w.stageMdid HAVING COUNT( * ) < 30 ) ORDER BY org.NAME, city.NAME, pr.projectName
查出的數據:
當然了,SQL有可以優化的地方,因為只是線下查詢一下,對效率沒有要求,樓主就這么按照思路寫的流水賬。