簡體   English   中英

LISTAGG() 內的 AVG()

[英]AVG() inside LISTAGG()

我需要對兩列進行分組,其中一列在 LISTAGG() 中具有平均值 AVG()。
我有以下代碼:

CREATE OR REPLACE VIEW countryTimes AS 
SELECT
  LISTAGG(claOL.odCode||'-'||(AVG(claOL.timeCla) GROUP BY(claOl.timeCla))) WITHIN GROUP (ORDER BY c.cCode) AS ProvaTempsMig,
  c.cDescription AS País,
  c.cCode AS CodiPaís
FROM countries c 
JOIN athletes a ON c.cCode = a.country 
JOIN classificationOL claOL ON a.idCode = claOL.idAth;



但這會引發此錯誤:

ORA-00907: 缺少右括號 erecho 00907. 00000 - “缺少右括號” *原因: *操作:

我正在使用甲骨文。

更新:
我需要做的是創建一個視圖,其中顯示 cCode、cDescription 和最后一列,其中包含單個國家/地區所有時間的 AVG。 所以我需要從多行創建,每個國家的一行。

代碼:

    CREATE TABLE Countries (
cCode VARCHAR(5) NOT NULL,
cdescription VARCHAR(100) NOT NULL,
CONSTRAINT couPK PRIMARY KEY (cCode)
);
CREATE TABLE athletes (
idCode NUMBER NOT NULL,
Name VARCHAR(200) NOT NULL,
Surname VARCHAR(200) NOT NULL,
country VARCHAR(5) NOT NULL,
CONSTRAINT athPK PRIMARY KEY (idCode),
CONSTRAINT countryFK FOREIGN KEY (country) REFERENCES Countries (cCode)
);
CREATE TABLE olympicDisciplines (
oCode VARCHAR(10) NOT NULL,
odName VARCHAR(200) NOT NULL,
discipline VARCHAR(200) NOT NULL,
CONSTRAINT olympicPK  PRIMARY KEY (oCode)
);
CREATE TABLE classificationOL(
idAth NUMBER NOT NULL,
odCode VARCHAR(10) NOT NULL,
timeCla INTEGER,
CONSTRAINT classifPK PRIMARY KEY (idAth, odCode),
CONSTRAINT claAthFK FOREIGN KEY (idAth) REFERENCES athletes (idCode),
CONSTRAINT claDFK FOREIGN KEY (odCode) REFERENCES olympicDisciplines (oCode)
);



更新 2:
數據:

INSERT INTO Countries VALUES ('UK', 'United Kingdom');
INSERT INTO Countries VALUES ('AND', 'Andorra');
INSERT INTO Countries VALUES ('FR', 'France');
INSERT INTO athletes VALUES (1, 'Jack', 'Johnson', 'UK');
INSERT INTO athletes VALUES (2, 'Pau', 'Márquez', 'AND');
INSERT INTO athletes VALUES (3, 'Pierre', 'Dubois', 'FR');
INSERT INTO athletes VALUES (4, 'Christophe', 'Dubois', 'FR');
INSERT INTO athletes VALUES (5, 'Adolphe', 'Moreau', 'FR');
INSERT INTO olympicDisciplines VALUES ('ATH', 'Athletics', 'Athletics');
INSERT INTO olympicDisciplines VALUES ('CYC', 'Cycling', 'Cycling');
INSERT INTO olympicDisciplines VALUES ('CCC', 'Cycling CC', 'Cross Country Cycling');
INSERT INTO classificationOL VALUES (1, 'ATH', 120);
INSERT INTO classificationOL VALUES (2, 'ATH', 119);
INSERT INTO classificationOL VALUES (3, 'CCC', 38);
INSERT INTO classificationOL VALUES (4, 'CCC', 37);
INSERT INTO classificationOL VALUES (5, 'ATH', 122);

閱讀您的第一個 UPDATE,如果您被允許,您可以將您的表轉換為對象來解決您的需要,而不是使用 LISTAGG()。 我會給你看:

CREATE TYPE average AS OBJECT( 
name VARCHAR(200), 
avgerageTime NUMBER);

CREATE TYPE results AS TABLE OF average;

CREATE TYPE countriesResults AS OBJECT( 
cName VARCHAR(100), 
cCode VARCHAR(5), 
classifications results
);

CREATE VIEW countriesAverages OF countriesResults 
WITH OBJECT OID (coName) 
AS 
SELECT c.cdescription, c.ccode, 
CAST (MULTISET (SELECT 
olympicDisciplines.name, avg(classificationOL.timeCla) 
FROM athletes a, countries, classificationOL, olympicDisciplines 
WHERE countries.cCode = c.cCode 
AND a.idCode = classificationOL.idAth 
AND a.country = countries.cCode 
AND olympicdisciplines.oCode = classificationOL.oCode 
GROUP BY olympicdisciplines.odName) AS results ) 
FROM countries c;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM