2012-12-16 6 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 - true - 쿼리에서 이것을 제거하고 대신 count (*)로 변경했습니다. –

+2

또한 위의 쿼리를 실행하기 전에 테이블 통계를 수집해야합니다. 그렇지 않으면'num_rows'가 잘못된 데이터를 포함 할 수 있습니다. –

관련 문제