国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

日常小SQL

2019-11-08 20:48:34
字體:
來源:轉載
供稿:網友

1.層次化遞歸查詢實現行轉列

如果市公司下面的供電所有一個指標作弊,則市公司該指標得0分。

             select t1.c_org_no,/n                        t1.c_org_name,/n                          t1.ym,/n                         t1.zb_id,/n                         t1.zbz,/n                         CASE/n                            WHEN ',' || t2.zb_id like '%' || t1.zb_id || '%' THEN/n                            0/n                           ELSE/n                            t1.df/n                         END df,/n                         t1.tj_type/n                     from (select t.* from   tablename   t where t.ym = '  ym  ') t1,/n                          (select x_org_no,/n                                  --ltrim(max(sys_connect_by_path(zb_id, ',')), ',') as zb_id/n                                  max(sys_connect_by_path(zb_id, ',')) as zb_id/n                             from (select x_org_no,/n                                          zb_id,/n                                          rn1,/n                                          lead(rn1) over(partition by x_org_no order by rn1) rn2                                   from (/n                                                            select t.*, row_number() over(order by x_org_no) rn1                                            from (select distinct t.x_org_no, t.zb_id/n                                                      from zb_pj_s t/n                                                     where t.ym = '  ym  '/n                                                       and t.isfake = '1'/n                                                     order by x_org_no) t) t2) tmp/n                            start with rn2 is null/n                           connect by rn2 = PRior rn1/n                            group by x_org_no) t2/n                    where t1.x_org_no = t2.x_org_no(+)  市公司下面是縣公司,縣公司下面是供電所,isfake='1'說明該供電所這項指標作弊

語句分析:

select distinct t.x_org_no, t.zb_id/n  from zb_pj_s t/n  where t.ym = '  ym  '/n  and t.isfake = '1'/n  order by x_org_no先給這個月作弊供電所的按縣公司和指標分組,按縣公司排序

數據應該是這樣:

縣公司編號      指標編號

36451                 1

36451                 3

36451                 5

36452                 1

36452                 2

36455                 2

36455                 7

然后

row_number() over(order by x_org_no) rn1給每個縣公司的的記錄賦予行號

縣公司編號      指標編號         rn1

36451                 1                     1

36451                 3                      2

36451                 5                      3

36452                 1                      1

36452                 2                      2

36455                 2                      1

36455                 7                       2

再給出分組里行號的下一個行號

lead(rn1) over(partition by x_org_no order by rn1) rn2

縣公司編號      指標編號         rn1          rn2

36451                 1                      1              2

36451                 3                      2              3

36451                 5                      3              null

36452                 1                      1              2

36452                 2                      2              null

36455                 2                      1              2

36455                 7                      2              null

在從rn2為null開始分層次遞歸查詢把查詢的路徑中某個字段用逗號連接起來

sys_connect_by_path(zb_id, ',') as zb_id/n  
start with rn2 is null/n  connect by rn2 = prior rn1/n  group by x_org_no) t2/n  

x_org_no          zb_id        

36451                5,3,1                                   

36452                2,1                                 

36455                7,2                

實現了行轉列。

然后判斷某指標如果被包含其中,則得0分
 CASE/n     WHEN ',' || t2.zb_id like '%' || t1.zb_id || '%' THEN/n     0/n     ELSE/n    t1.df/n   END df,/n 

2.MySQL實現rank() over()功能

候選人排行得分情況統計:SELECT	obj_new.rank,	obj_new.candidate,        obj_new.count,	obj_new.scoreFROM	(		SELECT			obj.candidate,                        obj.count,			obj.score,			@rownum := @rownum + 1 AS rownum,			@incrnum := CASE		WHEN @rowtotal = obj.score THEN			@incrnum		WHEN @rowtotal := obj.score THEN			@rownum		END AS rank		FROM		(			SELECT			candidate,                        count(*) count,			SUM(t.score) score			FROM				t_vote_temp t			WHERE				t.type = '3'			GROUP BY				t.candidate			ORDER BY				score DESC	    ) AS obj,	    (		    SELECT			@rownum := 0 ,@rowtotal := NULL ,@incrnum := 0	    ) r    ) AS obj_new

3.根據字段的不同數據值進行統計

	SELECT		max(t.voter_name) voter_name,--投票人		max(t.voter_orgname) voter_orgname,--單位		SUM(			CASE			WHEN t.type = '1' THEN				1			ELSE				0			END		) aa,                         --獎項類型是1投了多少人		SUM(			CASE			WHEN t.type = '2' THEN				1			ELSE				0			END		) bb,                        --獎項類型是2投了多少人		SUM(			CASE			WHEN t.type = '3' THEN				1			ELSE				0			END		) cc                      --獎項類型是2投了多少人	FROM		t_vote_temp t	GROUP BY		t.voter


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木乃县| 神池县| 巩留县| 贵溪市| 平远县| 乐都县| 睢宁县| 浏阳市| 星子县| 梁河县| 红原县| 海晏县| 大渡口区| 合水县| 玉田县| 留坝县| 弥勒县| 抚松县| 客服| 内乡县| 和龙市| 南京市| 金阳县| 枞阳县| 吴川市| 拉萨市| 蒙山县| 丁青县| 合水县| 乐至县| 德化县| 桓仁| 马尔康县| 舟山市| 贵港市| 山西省| 苏尼特右旗| 应用必备| 平乐县| 天柱县| 涞源县|