2011-12-02 3 views
1

모든 컬럼을 통해 널 필드의 수는 약 150 열 및 2,600 행으로 datapoints을했다. 150 열은 너무 많지만 CSV를 가져온 후에이 DB를 얻었고 열 수를 줄이는 것은 불가능합니다.SQL (SQLite는) 나는 테이블을 가지고

데이터에서 통계적 자료를 얻어야합니다. 예 : 하나의 질문은 다음과 같습니다. (모든 열 중) 총 필드 수는 null입니다. 어떻게 효율적으로이 일을 처리 할 수 ​​있는지 누군가가 알고 있습니까? 모든 열의 손으로하지 않고,

SELECT count(*) FROM datapoints tb1 where 'tb1'.'column1' is null; 

그러나이 어떻게 함께 모든 열에 대해이 문제를 해결 할 수 있습니다 하나 개의 컬럼에 대한

그것은 문제가되지 않습니다?

최저

, 마이클

답변

1

Lamak의 아이디어를 바탕으로 생각하면이 아이디어는 어떻습니까?

N
SELECT (N * COUNT(*)) - (
    COUNT(COLUMN_1) 
    + COUNT(COLUMN_2) 
    + ... 
    + COUNT(COLUMN_N) 
) 
FROM DATAPOINTS; 

은 열 수 있습니다. 비결은 COUNT (열)의 요약 시리즈를 만드는 것입니다,하지만 좋은 텍스트 편집기 및/또는 스프레드 시트 너무 끔찍한 안된다.

+0

위의 내용은 DB2와 Access에서 시도되었으므로 잘하면 sqlite에서도 작동 할 것입니다. – rskar

+0

스프레드 시트를 사용하여 쿼리를 작성하는 것이 좋습니다. 네. 쿼리 자체에 대해별로 좋지 않은 유일한 점은 N을 계산하고 수동으로 최신 상태로 유지해야한다는 것입니다. 머피의 법칙이 이상적이지 않을 수도 있습니다. – Brian

+0

내 문제는 고마워. SQLite는 에서이 구문이 같아야 다음 SELECT (N *의 수 (*)) - ( COUNT (t1.'COLUMN_1 ') + COUNT (t1.'COLUMN_2') + ... +를 COUNT (t1.'COLUMN_N ') ) FROM datapoints t1; – Michael

0

음, COUNT (대부분의 집계 함수들이 그냥은) NULL 값을 무시합니다. 귀하의 경우에는 COUNT(*)을 사용하고 있기 때문에 테이블의 모든 행을 계산하지만 모든 열에서 그 행을 계산할 수 있습니다. 다음과 같은 것 :

SELECT TotalRows-Column1NotNullCount, etc 
FROM (
    SELECT COUNT(1) TotalRows, 
      COUNT(column1) Column1NotNullCount, 
      COUNT(column2) Column2NotNullCount, 
      COUNT(column3) Column3NotNullCount .... 
    FROM datapoints) A 
0

나는 쉬운 방법이 있다고 생각하지 않습니다. 나는 150 가지 질문을 시작했다. 매번 한 단어 (열 이름) 만 바꾸면됩니다.

0

은 필드 목록을 생성하는 시각적 쿼리 도구를 사용하는 것이 종종 도움 시작하고 사용하려면 잘라 내기/붙여 넣기/검색/무엇이 필요한지으로 변환하는 스프레드 시트 프로그램에서 교체하거나 조작. 빠르게 생성 할 수있는 비주얼 쿼리 빌더로

SELECT SUM(CASE COLUMN1 WHEN NULL THEN 1 ELSE 0 END) + 
     SUM(CASE COLUMN2 WHEN NULL THEN 1 ELSE 0 END) + 
     SUM(CASE COLUMN3 WHEN NULL THEN 1 ELSE 0 END) + 
     ... 
FROM DATAPOINTS; 

: 한 번에 모든 작업을 수행하려면 당신은 같은 것을 사용할 수 있습니다

SELECT COLUMN1, COLUMN2, COLUMN3 ... FROM DATAPOINTS; 

그런 다음에 필요로하는 모든 텍스트와 쉼표를 대체 할 수있다 두 필드 이름 사이에 나타나며 첫 번째 필드와 마지막 필드를 수정합니다. 따라서 ","에 대한 검색에서 "WHEN NULL 1 ELSE 0 END) + SUM (사례)"로 바꾸고 첫 번째 필드와 마지막 필드를 수정하십시오

관련 문제