寫(xiě)個(gè)大概意思,畢竟我并不知道你的表結(jié)構(gòu)是什么樣的。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站建設(shè)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)雞西免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
你的表格是什么樣的,特別是回見(jiàn)結(jié)構(gòu),如果是“年月日時(shí)分秒”結(jié)構(gòu)的,那么首先單獨(dú)截取"時(shí)"(不是截取年月日時(shí),而是單獨(dú)截取時(shí)),截取范圍是4,這樣出來(lái)的結(jié)果是每天0-4點(diǎn)的所有值。
然后開(kāi)始考慮分組,你說(shuō)的是每年每月的平均值,那么分組應(yīng)該是“年月”,然后再avg一下你要平均的值應(yīng)該就可以了。
你 select 后面只寫(xiě)了sno。。。沒(méi)有avg成績(jī),但是最后group by 了,當(dāng)然會(huì)報(bào)錯(cuò)。還有你的sno沒(méi)有指明是哪個(gè)表的,后面帶了x和y,sc表也需要指明。
平均成績(jī)也沒(méi)搞明白。。
那只能這樣
select a.sno,a.name,avg(b.score) as avgscores from sc a,course b where a.sno =b.sno and b.cno in ('001','002') group by a.sno,a.name order by avgscores desc
需要用到avg,代碼如下:
select stu_id,avg(成績(jī)) from 表 group by stu_id
Oracle Database,又名Oracle RDBMS,是甲骨文公司的一款關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。
甲骨文公司,全稱(chēng)甲骨文股份有限公司(甲骨文軟件系統(tǒng)有限公司),是全球最大的企業(yè)級(jí)軟件公司,總部位于美國(guó)加利福尼亞州的紅木灘。1989年正式進(jìn)入中國(guó)市場(chǎng)。2013年,甲骨文已超越?IBM?,成為繼?Microsoft?后全球第二大軟件公司。
可以參考如下:
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;