PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

postgresql - số lượng (không có giá trị rỗng) của mỗi cột trong bảng

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
...


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GroupingError:ERROR:cột phải xuất hiện trong mệnh đề GROUP BY hoặc được sử dụng trong một hàm tổng hợp

  2. Truy vấn ĐẶT HÀNG THEO số hàng được trả về từ một LỰA CHỌN khác

  3. Ánh xạ kiểu nối tiếp PostgreSQL với chú thích Hibernate

  4. PostgreSQL 13:Đừng để các vị trí giết chết vị trí chính của bạn

  5. Cách giao dịch_timestamp () hoạt động trong PostgreSQL