2012-12-16 92 views
1

我找不到我的查詢中的錯誤:如何統計表中所有表中的列數和行數?

SELECT 
u.Table_Name, 
count(distinct c.Column_Name), 
sum(u.num_rows)  
FROM User_Tab_Columns c, User_Tables u  
WHERE u.TABLE_NAME = c.TABLE_NAME  
group by u.Table_Name; 

結果是:

TABLE_NAME      COUNT(DISTINCTC.COLUMN_NAME) SUM(U.NUM_ROWS)  
------------------------------ ---------------------------- --------------- 
DEPT              3    12  
EMP              8    112 

,它應該是:

TABLE_NAME      COUNT(DISTINCTC.COLUMN_NAME) SUM(U.NUM_ROWS)  
    ------------------------------ ---------------------------- --------------- 
    DEPT              3    4  
    EMP              8    14 

行,以便查詢多個號碼和列數,但我不知道爲什麼?

回答

2

由於行的數量是每表中,可以簡單地按它:

SELECT 
u.Table_Name, 
count(*), 
u.num_rows  
FROM User_Tab_Columns c, User_Tables u  
WHERE u.TABLE_NAME = c.TABLE_NAME  
group by u.Table_Name, u.num_rows; 
+2

distinct'的'的存在是沒有意義的。表不能有多個具有相同名稱的列。 –

+0

@NicholasKrasnov - 真 - 已經從查詢中刪除了這個 - 並改爲count(*)。 –

+2

在執行上述查詢之前,還必須收集表統計信息。否則'num_rows'可能包含錯誤的數據。 –

相關問題