특정 테이블의 각 열 수를 계산할 수있는 방법을 찾고 있습니다. column_name은 information_schema.columns에서 쿼리해야합니다. 결과는 다음과 같아야합니다.postgresql - 테이블의 각 열의 개수 (null 값 없음)
column_name : count
SQL을 사용하여 쿼리 할 수 있습니까? 아니면 한 번도 수행하지 않은 기능이 필요합니까?
귀하의 도움에 감사드립니다. grassu
특정 테이블의 각 열 수를 계산할 수있는 방법을 찾고 있습니다. column_name은 information_schema.columns에서 쿼리해야합니다. 결과는 다음과 같아야합니다.postgresql - 테이블의 각 열의 개수 (null 값 없음)
column_name : count
SQL을 사용하여 쿼리 할 수 있습니까? 아니면 한 번도 수행하지 않은 기능이 필요합니까?
귀하의 도움에 감사드립니다. grassu
이 쿼리는 원하는 것을 얻기 위해 DML 문을 작성합니다.
SELECT 'SELECT ' || string_agg('count(' || quote_ident(attname) || ')', ', ')
|| 'FROM ' || attrelid::regclass
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attnum >= 1 -- exclude tableoid & friends (neg. attnum)
AND attisdropped is FALSE -- exclude deleted columns
GROUP BY attrelid;
결과 :
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
당신도 자동으로 실행할 수 있습니다. 그러나 계획 SQL에서 plpgsql 함수에 EXECUTE
또는 이에 대한 DO
문 (PostgreSQL 9.0 이상)이 필요합니다.
string_agg()
기능을 사용하려면 Postgres 9.0 이상이 필요합니다. 이전 버전에서는 array_to_string(array_agg(...), ', ')
을 사용할 수 있습니다.
특수 캐스트 'mytbl'::regclass
에 대해 궁금 할 수 있습니다. 설명서의 object identifier types에 대한 자세한 내용을 읽어보십시오.
BTW : NULL
값은 기본적으로 COUNT(col)
에 추가되지 않습니다.
mytbl
(스키마 한정) 테이블 이름으로 대체하십시오. 귀하의 경우에는 그이어야한다 :
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
대소 문자가 혼합되거나 엉망 식별자를 사용해야하는 경우는 (인용 부호에주의) :
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...
감사의 버전이 필요합니다. 그러나 그것을 실행할 때 나는 빈 결과를 얻는다. – user1288241
@ user1288241 : 저를 위해 일합니다. 게시하기 전에 테스트했습니다. 'mytbl'에 당신의 (스키마 정규화 된, 필요하다면) 테이블 이름을 대체 할 필요가 있다는 것을 알고 있습니까? –
예, 제가 해 냈습니다. postgresql 9.1 있고 테이블에 약 600 열이 있습니다. 표는 다음과 같다 (표 geoproject.mes_wastab ( 인비 드 문자 (16 변화), invtype 문자 다양한 (3), smpid 정수, smpname 문자 다양한 (40), smpdate 날짜, smptime 캐릭터가 변화를 만들 5) o2st_p 배정도, wspgokna 배정도, 배정도 o2_p , absenkungs 배정도, klarstrom3 배정도, klarstrom2 배정도, klarstrom4 배정도, ........... ............. ....... ) WITH ( OIDS = FALSE ); 어떤 생각? – user1288241
우리는 당신의 대답을 PostgrreSQL –