2016-02-04 35 views
0

我想知道是否有人發現了一種方法,您可以在其中獲取表中的平均值或所有列。我目前有900列的表,它將使輸入查詢非常繁瑣與對於每列oracle SQL

SELECT AVG(t.columnA), AVG(t.columnB), etc... 

是否有可能是另一種方式去了解這一點。假設它們都是NUMBER類型。

+0

查找'all_tab_cols'中的列名稱並將查詢邏輯構建爲查詢或使用電子表格。 –

+0

900列!!!創建一個視圖,爲每列創建一個UNION ALL。 (很高興有。)然後做一個小組。 – jarlh

+0

如果你可以生成一個select語句,只需要找到並替換所有的''',AVG('),然後你需要在'from'關鍵字前添加第一個'AVG('和''''''''我的建議是如果您的查詢工具不支持查找/替換所有功能,請使用Notepad ++。 – vtuhtan

回答

2

這裏是您的解決方案,根據戈登的想法:

select 'SELECT AVG(' ||all_columns||') FROM YourTable' from (
    SELECT LISTAGG(column_name,',') within group (order by column_name) as all_Columns 
    FROM all_tab_columns 
    WHERE table_name = 'YourTable') 

與你的表名稱替換YourTable,這將產生一個輸出,您將需要複製和運行。

它生成所有的列名,用逗號分隔,並且集中到一個select查詢中。

+1

[AVG](http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions018.htm)不包含多個參數;有多個列的話,生成的SQL會得到ORA-00909,但是這種方法可以用'LISTAGG(column_name,'),AVG(')'來代替。 –