######SQL多count查詢(不用子查詢,條件加對了就行)(注意:條件位置可變化。)》分析領導的實現過程。心得筆記。
阿新 • • 發佈:2018-12-10
===》分析領導的實現過程。心得筆記。
#業務場景:不同企業下有各自的角色。角色下有許可權(角色:許可權=多對多,有中間表)和使用者(角色:使用者=一對多,使用者表有個角色id) #表結構:看檔案。 #需求:登入使用者所屬企業id, #1 SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT(b.PB_UCT_no) -- , c.PB_PER_code,COUNT(c.PB_PER_code) from pb_combaseinfo m INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno AND a.PB_ROL_ownedcomno = 8000002 LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code #1 V2 SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT(b.PB_UCT_no) -- , c.PB_PER_code,COUNT(c.PB_PER_code) from pb_combaseinfo m INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code -- WHERE a.PB_ROL_ownedcomno = 8000002 #語法報錯。 WHERE m.PB_CMB_comno = 8000002 #語法報錯。 #1 V3 SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT(b.PB_UCT_no) -- , c.PB_PER_code,COUNT(c.PB_PER_code) from pb_combaseinfo m INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno WHERE a.PB_ROL_ownedcomno = 8000002 # 或 WHERE m.PB_CMB_comno = 8000002 都一樣。 -- 只要條件加對了,就行!!!(條件的位置調整+SQL基礎語法)【where提取到最後(不放在查詢角色後面),group by 必須要放到where後面。】 GROUP BY a.PB_ROL_code #1 V3 》基礎上 新增 統計 許可權個數。ok SELECT a.PB_ROL_code,a.PB_ROL_name, b.PB_UCT_nickname,COUNT( DISTINCT b.PB_UCT_no), c.PB_PER_code,COUNT(DISTINCT c.PB_PER_code) from pb_combaseinfo m INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno LEFT JOIN pb_perole c ON c.PB_ROL_code = a.PB_ROL_code #1 V3 基礎上 新增 統計 許可權。 WHERE a.PB_ROL_ownedcomno = 8000002 # 或 WHERE m.PB_CMB_comno = 8000002 都一樣。 -- 只要條件加對了,就行!!!(條件的位置調整+SQL基礎語法)【where提取到最後(不放在查詢角色後面),group by 必須要放到where後面。】 -- 【再關聯 角色許可權表後,統計的使用者個數,也變化了!》》》使用distinct 約束後恢復原樣。 -- 》》》###要寫出來這個約束,###必須很清楚自己現在查出來的使用者個數的資料是如何出來的: -- 統計使用者個數有幾個,相當於後面可以擴展出多少條使用者記錄。所以因為之前統計的使用者個數比較少,可以猜到:使用者記錄一定是重複了!】 GROUP BY a.PB_ROL_code #2 SELECT a.PB_ROL_code,a.PB_ROL_name -- , b.PB_UCT_nickname,COUNT(b.PB_UCT_no) , c.PB_PER_code,COUNT(c.PB_PER_code) from pb_combaseinfo m INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno AND a.PB_ROL_ownedcomno = 8000002 -- LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code LEFT JOIN pb_perole c ON c.PB_ROL_code = a.PB_ROL_code GROUP BY c.PB_ROL_code #3 【簡單的多個join放到一起,不行。】 SELECT a.PB_ROL_code,a.PB_ROL_name , b.PB_UCT_nickname,COUNT(b.PB_UCT_no) , c.PB_PER_code,COUNT(c.PB_PER_code) from pb_combaseinfo m INNER JOIN pb_role a ON m.PB_CMB_comno = a.PB_ROL_ownedcomno AND a.PB_ROL_ownedcomno = 8000002 LEFT JOIN pb_usract b ON b.PB_UCT_roleno = a.PB_ROL_code AND b.PB_UCT_ownedcom = a.PB_ROL_ownedcomno GROUP BY a.PB_ROL_code -- LEFT JOIN pb_perole c ON c.PB_ROL_code = a.PB_ROL_code GROUP BY c.PB_ROL_code LEFT JOIN pb_perole c ON c.PB_ROL_code = b.PB_ROL_code #answer 領導 SELECT c.PB_ROL_code as roleID ,c.PB_ROL_name as roleName ,c.PB_ROL_desc as roleDesc ,count(DISTINCT a.PB_UCT_no) AS peoCount ,count(DISTINCT d.PB_PER_code) as perCount FROM pb_combaseinfo b LEFT JOIN pb_role c ON c.PB_ROL_ownedcomno = b.PB_CMB_comno LEFT JOIN pb_usract a ON a.PB_UCT_roleno = c.PB_ROL_code AND a.PB_UCT_ownedcom = b.PB_CMB_comno LEFT JOIN pb_perole d ON d.PB_ROL_code = c.PB_ROL_code AND a.PB_UCT_roleno = d.PB_ROL_code WHERE b.PB_CMB_comno = 8000002 #{enterpriseId,jdbcType=VARCHAR} GROUP BY c.PB_ROL_name
===》語雀介面文件。
檢視企業角色
請求方式
GET
呼叫的url
modules/intersert/action/getRolesForEnterprise.htm |
傳參
無。(已登入使用者才能呼叫此介面,登入使用者從Redis取查詢條件:企業編號:Redis key:"ENTERUUID")
邏輯
-
判斷Redis裡“是否是管理員”key的值,判斷登入使用者是不是管理員。是管理員才繼續查詢。不是返回錯誤提示“不是管理員”。
-
從Redis取查詢條件:企業編號:Redis key:"ENTERUUID"。(因為Redis的key是token,首先要獲取token。app登入請求有引數token,web登入需要從session裡取token。邏輯封裝到了BaseAction的getToken方法。)
-
根據企業編號查詢:當前登入使用者所在的企業下所有的角色列表。
-
同時查詢出每個角色擁有的許可權個數、每個角色對應的當前企業的使用者個數。
返回值
已經存在資料
,返回json:
[ {
"roleID" : 0,
"roleName" : "管理員",
"roleDesc" : null,
"peoCount" : 10001,
"perCount" : 1
}, {
"roleID" : 0,
"roleName" : "經辦員",
"roleDesc" : null,
"peoCount" : 10001,
"perCount" : 1
} ]
其他錯誤
{
"msg": "PB0000-系統發生錯誤",
"code": 400
}