2016-12-26 19 views
0

Oracleと平均の中央値を計算する必要があります。私はこれを持っている:Oracle SQL平均クエリ

SELECT V.Id_Aeropuerto_Destino AS Id_Aeropuerto, C.Nombre AS Ciudad_Destino, A.nombre AS Aeropuerto, 
(SELECT SUM((TO_NUMBER(V.Retraso_Salida,'99999999D99','nls_numeric_characters=''.,''')) + 
     (TO_NUMBER(V.Retraso_Llegada,'99999999D99','nls_numeric_characters=''.,'''))) 
     FROM Vuelo V 
     WHERE V.Id_Aeropuerto_Destino=Id_Aeropuerto) Retraso_Total 
FROM Ciudad C, Aeropuerto A, Vuelo V 
WHERE V.Id_Aeropuerto_Destino=A.Id_Aeropuerto AND A.Ciudad = C.Id_Ciudad; 

これはフライト(「Retraso_Total」)の数の合計遅延を計算します。

SELECT AVG(SUM((TO_NUMBER(V.Retraso_Salida,'99999999D99','nls_numeric_characters=''.,''')) + 
     (TO_NUMBER(V.Retraso_Llegada,'99999999D99','nls_numeric_characters=''.,''')))) 
     FROM Vuelo V 
     WHERE V.Id_Aeropuerto_Destino=Id_Aeropuerto 
     GROUP BY V.Id_Aeropuerto_Destino) Retraso_Medio 

:私はこれを試してください

SELECT V.Id_Aeropuerto_Destino AS Id_Aeropuerto, C.Nombre AS Ciudad_Destino, A.nombre AS Aeropuerto, 
(SELECT AVG SUBQUERY) Retraso_Medio, 
(SELECT SUM((TO_NUMBER(V.Retraso_Salida,'99999999D99','nls_numeric_characters=''.,''')) + 
     (TO_NUMBER(V.Retraso_Llegada,'99999999D99','nls_numeric_characters=''.,'''))) 
     FROM Vuelo V 
     WHERE V.Id_Aeropuerto_Destino=Id_Aeropuerto) Retraso_Total 
FROM Ciudad C, Aeropuerto A, Vuelo V 
WHERE V.Id_Aeropuerto_Destino=A.Id_Aeropuerto AND A.Ciudad = C.Id_Ciudad; 

:> Retraso_Medio、このような何か - 今私は(便の "Retraso_Total" /番号)を取得するには、 "Retraso_Total" からAVGを行う必要がありますしかし、このサブクエリは機能しません。

私はどのようにそれを行うことができますか(すべて同じクエリ内)?

ありがとうございます! (市の

CREATE TABLE Vuelo(
    Id_Avion number(4), 
    Id_Aeropuerto_Origen number(5), 
    Id_Aeropuerto_Destino number(5), 
    Id_Aerolinea varchar(2), 
    Hora_Salida number(4), 
    Hora_Llegada number(4), 
    Retraso_Salida varchar(5), 
    Retraso_Llegada varchar(5), 
    Fecha varchar(10), 
    Cancelado varchar(3) NOT NULL, 
    Pasajeros varchar(10) NOT NULL, 
    Distancia varchar(10) NOT NULL, 
    CONSTRAINT pk_Vuelo PRIMARY KEY(Id_Avion, Id_Aeropuerto_Origen, Fecha, Hora_salida), 
    CONSTRAINT fk_Avion FOREIGN KEY(Id_Avion) REFERENCES Avion(Id_Avion), 
    CONSTRAINT fk_Aeropuerto_Origen FOREIGN KEY(Id_Aeropuerto_Origen) REFERENCES Aeropuerto(Id_Aeropuerto), 
    CONSTRAINT fk_Aeropuerto_Destino FOREIGN KEY(Id_Aeropuerto_Destino) REFERENCES Aeropuerto(Id_Aeropuerto), 
    CONSTRAINT fk_Aerolinea FOREIGN KEY(Id_Aerolinea) REFERENCES Aerolinea(Id_Aerolinea), 
    CONSTRAINT fk_Fecha FOREIGN KEY(Fecha) REFERENCES Fecha(Id_Fecha) 
); 

表シウダー:

表Vuelo(フライト)(id_plane、id_origin_airport、id_destiny_airport、id_company、出発時間、到着時間、出発の遅れ、到着遅延、日付、キャンセル、乗客、MILLESを持っています

CREATE TABLE Ciudad(
    Id_Ciudad number(7), 
    Nombre varchar(80) NOT NULL, 
    Latitud varchar(15) NOT NULL, 
    Longitud varchar(15) NOT NULL, 
    Habitantes number(10) NOT NULL, 
    Timezone varchar(80) NOT NULL, 
    CONSTRAINT pk_Ciudad PRIMARY KEY(Id_Ciudad) 
); 

表アエロ(空港)id_airportた、名前、コード、id_city、状態、STATE_CODE:

)id_city、名称、緯度、経度、人口、タイムゾーンを有しています
CREATE TABLE Aeropuerto(
    Id_Aeropuerto number(5), 
    Nombre varchar(80) NOT NULL, 
    Codigo varchar(4) NOT NULL, 
    Ciudad number(5) NOT NULL, 
    Estado varchar(80) NOT NULL, 
    Codigo_Estado varchar(4) NOT NULL, 
    CONSTRAINT pk_Aeropuerto PRIMARY KEY(Id_Aeropuerto), 
    CONSTRAINT fk_Ciudad FOREIGN KEY(Ciudad) REFERENCES Ciudad(Id_Ciudad) 
); 
+0

あなたは何をしようとしていますか?少し説明してください – GurV

+0

便数の合計( "Retraso Total")とその平均( "Retraso Total" /フライト数)を計算する必要があります。私の英語のために申し訳ありません – Patatas91

+0

いくつかのサンプルデータと予想される出力と計算のルールを投稿してください – GurV

答えて

0

あなたのコメントから、あなたの質問のオープニングラインには、メディアよりむしろ平均を計算したいようです。

これは非常に簡単です。オラクルAVG()関数は、合計とカウントを得る必要なく、私たちの平均を計算します。テーブルが文字列を使用して数値を格納するため、キャストのために明らかに面倒です。

平均は集計関数ですので、非集計列でグループ化する必要があります。あなたの例では、目的地の空港ID、都市名を意味します。これはあなたのために働くはずです:

SELECT V.Id_Aeropuerto_Destino AS Id_Aeropuerto 
     , C.Nombre AS Ciudad_Destino 
     , A.nombre AS Aeropuerto 
     , AVG((TO_NUMBER(V.Retraso_Salida,'99999999D99','nls_numeric_characters=''.,''')) + 
     (TO_NUMBER(V.Retraso_Llegada,'99999999D99','nls_numeric_characters=''.,'''))) 
     as "Retraso_Total" 
FROM Vuelo V 
    join Aeropuerto A 
     on V.Id_Aeropuerto_Destino=A.Id_Aeropuerto 
    join Ciudad C 
     on A.Ciudad = C.Id_Ciudad 
group by V.Id_Aeropuerto_Destino 
     , C.Nombre 
     , A.nombre 
/
+0

ありがとう!しかし、私はあなたがこれをやる理由を理解していません: "Retraso_Total"として/ count(*)。 – Patatas91

+0

他のもの、もし私がこれを実行すると、 "retraso_Total"に705376344 - 、01055565のようなnumersが発生します。 – Patatas91

+0

'/ count(*)'は編集エラーです。それを使わないでクエリを試してください – APC