PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

GROUP BY atau COUNT Suka Nilai Bidang - UNPIVOT?

Saya mungkin telah menemukan solusi:

SELECT id
      ,l - length(replace(t, 'P', '')) AS nr_p
      ,l - length(replace(t, 'F', '')) AS nr_f
      ,l - length(replace(t, 'I', '')) AS nr_i
FROM   (SELECT id, test::text AS t, length(test::text) AS l  FROM test) t

Triknya bekerja seperti ini:

  • Ubah tipe baris menjadi representasi teksnya.
  • Mengukur panjang karakter.
  • Ganti karakter yang ingin Anda hitung dan ukur perubahan panjangnya.
  • Hitung panjang baris asli dalam subpilihan untuk penggunaan berulang.

Ini membutuhkan P, F, I tidak ada di tempat lain di baris. Gunakan sub-pilihan untuk mengecualikan kolom lain yang mungkin mengganggu.

Diuji dalam 8.4 - 9.1. Tidak ada yang menggunakan PostgreSQL 7.4 lagi saat ini, Anda harus menguji diri sendiri. Saya hanya menggunakan fungsi dasar, tetapi saya tidak yakin apakah casting rowtype ke teks layak dilakukan di 7.4. Jika tidak berhasil, Anda harus menggabungkan semua kolom uji satu kali dengan tangan:

SELECT id
      ,length(t) - length(replace(t, 'P', '')) AS nr_p
      ,length(t) - length(replace(t, 'F', '')) AS nr_f
      ,length(t) - length(replace(t, 'I', '')) AS nr_i
FROM   (SELECT id, test1||test2||test3||test4 AS t FROM test) t

Ini mengharuskan semua kolom menjadi NOT NULL .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menjalankan perintah PostgreSQL RAISE secara dinamis

  2. Bisakah PostGIS digunakan untuk membuat peta grid suatu negara?

  3. Pertemuan PostgreSQL Praha

  4. Hitung baris dalam partisi dengan Order By

  5. PHP tidak dapat terhubung ke PostgreSQL di CentOS 7