2012-12-16 85 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'可能包含错误的数据。 –

相关问题