Truy vấn này sẽ tạo ra câu lệnh DML để có được những gì bạn muốn.
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;
Lợi nhuận:
SELECT count(col1), count(col2), count(col3), ...
FROM mytbl
Bạn cũng có thể tự động thực thi nó. Nhưng không phải trong kế hoạch SQL, bạn cần EXECUTE
trong một hàm plpgsql hoặc DO
tuyên bố (PostgreSQL 9.0 trở lên) cho điều đó.
Bạn cũng cần Postgres 9.0 trở lên cho string_agg()
hàm số. Trong các phiên bản cũ hơn, bạn có thể thay thế:array_to_string(array_agg(...), ', ')
.
Bạn có thể thắc mắc về dàn diễn viên đặc biệt 'mytbl'::regclass
. Đọc thêm về các loại mã định danh đối tượng trong sách hướng dẫn.
BTW:NULL
các giá trị không thêm vào COUNT(col)
theo mặc định.
Thay thế tên bảng (đủ điều kiện giản đồ) cho mytbl
. Trong trường hợp của bạn, điều đó phải là:
...
WHERE attrelid = 'geoproject.mes_wastab'::regclass
...
Nếu bạn nên sử dụng chữ hoa và chữ thường hoặc các số nhận dạng lộn xộn (lưu ý dấu ngoặc kép):
...
WHERE attrelid = '"gEopRoject"."MES_wastab"'::regclass
...