你好,如果格式都如你贴图的一样的话可以用这种最笨的方式全一个个化成数值型,然后相加取值。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网页空间、营销软件、网站建设、太白网站维护、网站推广。
select CHECK_NORM,
(to_number(substr(CHECK_INFO, 1, 4)) +
to_number(substr(CHECK_INFO, 6, 4)) +
to_number(substr(CHECK_INFO, 11, 4)) +
to_number(substr(CHECK_INFO, 16, 4)) +
to_number(substr(CHECK_INFO, 21, 4)) +
to_number(substr(CHECK_INFO, 26, 4)) +
to_number(substr(CHECK_INFO, 31, 4)) +
to_number(substr(CHECK_INFO, 36, 4)) +
to_number(substr(CHECK_INFO, 41, 4)) +
to_number(substr(CHECK_INFO, 46, 4))) / 10
from 表名;
如果格式不统一,建议如2楼的,把字符型中的‘/’全部替换成‘+’,然后拼接出来一个sql,执行处理。
望采纳,谢谢。
语法:
[ lable_name]
loop
statement...
end loop [lable_name]
请点击输入图片描述
注释:lable_name:loop语句的标签,与结构控制语句case类似
loop:循环的开始
statement:循环体,也就是需要重复执行的语句
end loop:循环结束标志
基本loop循环由于没有控制循环结束语句,所以循环体中需要判断是否循环结束来控制循环,要不然会出现死循环的情况
1ORACLE中的结构控制(case语句)
请点击输入图片描述
一、使用EXIT...WHEN来判断是否循环结束
例:求1+2+..+100的和
DECLARE
str1 number;
nu number;
BEGIN
str1 := 1 ;
nu := 0 ;
loop_text
LOOP
nu := nu + str1;
str1 := str1+1;
EXIT loop_text WHEN str1100 ;
END LOOP;
DBMS_OUTPUT.PUT_LINE('循环结束。1+2+。。。+100的结果为:'||nu);
END;
请点击输入图片描述
代码解析:
第2--6行:声明两个加数并赋予初始值
第9--10:循环体,做四则运算,加数nu + 加数str1 的和在赋值给加数nu
第11行:判断str1是否为真,为真则退出,为假则继续循环
第13行:循环结束后打印输出结果
请点击输入图片描述
二、使用IF语句来判断是否循环结束
例:求1+2+..+100的和
DECLARE
str1 number;
nu number;
BEGIN
str1 := 1 ;
nu := 0 ;
loop_text
LOOP
nu := nu + str1;
str1 := str1+1;
IF str1100 THEN
DBMS_OUTPUT.PUT_LINE('循环结束');
EXIT loop_text;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE('1+2+。。。+100的结果为:'||nu);
END;
1ORACLE中的结构控制(IF语句)
请点击输入图片描述
代码解析:
第1-6行与上诉一致,声明两个参数然后在赋值初始化
第11-13行:使用IF语句做判断,条件为真这执行退出语句EXIT,条件为假则跳过继续循环
请点击输入图片描述
你这思路有点乱,应该是两个查询:
SELECT G."ID",G."NAME",COUNT(*)
FROM "GROUPS" G,USERS U
WHERE G."ID"=U."GROUPID"
GROUP BY G."NAME",G."ID"
select avg(cnt) from
(SELECT G."ID",G."NAME",COUNT(*) cnt
FROM "GROUPS" G,USERS U
WHERE G."ID"=U."GROUPID"
GROUP BY G."NAME",G."ID"
) tmp
可以参考如下:
CREATE TABLE TEMP_AVG_SCORE
(T_DATA DATE,
T_NAME VARCHAR2(10),
T_SCORE NUMBER(10)
) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-01-01','YYYY-MM-DD'),'A',30) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-01-10','YYYY-MM-DD'),'A',40) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-01-15','YYYY-MM-DD'),'A',35) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-02-01','YYYY-MM-DD'),'B',120) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-02-10','YYYY-MM-DD'),'B',130) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-02-15','YYYY-MM-DD'),'B',150) ;
INSERT INTO TEMP_AVG_SCORE VALUES (TO_DATE('2015-02-20','YYYY-MM-DD'),'B',140) ;
COMMIT;
SELECT T.T_NAME 人员,
AVG(CASE
WHEN TO_CHAR(T.T_DATA, 'MM') = '01' AND T.NUM = 3 THEN
CASE
WHEN RN = 1 THEN
T.T_SCORE * 120 / 100
WHEN RN = 2 THEN
T.T_SCORE * 100 / 100
ELSE
T.T_SCORE * 80 / 100
END
WHEN TO_CHAR(T.T_DATA, 'MM') = '01' AND T.NUM = 4 THEN
CASE
WHEN RN = 1 THEN
T.T_SCORE * 120 / 100
WHEN RN = 2 THEN
T.T_SCORE * 110 / 100
WHEN RN = 3 THEN
T.T_SCORE * 90 / 100
ELSE
T.T_SCORE * 80 / 100
END
ELSE 0
END) 一月份,
AVG(CASE
WHEN TO_CHAR(T.T_DATA, 'MM') = '02' AND T.NUM = 3 THEN
CASE
WHEN RN = 1 THEN
T.T_SCORE * 120 / 100
WHEN RN = 2 THEN
T.T_SCORE * 100 / 100
ELSE
T.T_SCORE * 80 / 100
END
WHEN TO_CHAR(T.T_DATA, 'MM') = '02' AND T.NUM = 4 THEN
CASE
WHEN RN = 1 THEN
T.T_SCORE * 120 / 100
WHEN RN = 2 THEN
T.T_SCORE * 110 / 100
WHEN RN = 3 THEN
T.T_SCORE * 90 / 100
ELSE
T.T_SCORE * 80 / 100
END
ELSE
END) 二月
FROM (SELECT A.T_DATA,
A.T_NAME,
A.T_SCORE,
ROW_NUMBER() OVER(PARTITION BY A.T_NAME ORDER BY A.T_DATA DESC) RN,
B.NUM
FROM temp_avg_score A
LEFT JOIN (SELECT T_NAME, COUNT(1) NUM
FROM temp_avg_score
GROUP BY T_NAME) B ON A.T_NAME = B.T_NAME) T
GROUP BY T.T_NAME;