Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

bagaimana cara menghitung nilai horizontal pada database?

Tidak ada sintaks bawaan yang memungkinkan Anda untuk merujuk ke sekumpulan kolom secara dinamis, yaitu tanpa menyebutkan namanya secara eksplisit. Jika Anda menginginkan dinamika, Anda perlu membuat kueri metadata untuk mengambil nama kolom yang diperlukan, lalu membuat kueri akhir secara dinamis.

Tetapi sebelum itu Anda masih perlu memiliki gagasan bagaimana tepatnya kueri dinamis harus melakukan pekerjaan itu sendiri. Jadi, pertama-tama Anda harus menyelesaikan masalah dengan terbatas kumpulan kolom.

Ada lebih dari satu cara untuk menyelesaikan masalah ini. metode yang disarankan oleh @bluefeet mungkin salah satu yang lebih jelas dan juga kurang efisien. Anda dapat mencoba setidaknya dua alternatif:

  1. Hitung setiap kolom secara terpisah menggunakan agregasi bersyarat dan jumlahkan semua hasil dalam satu ekspresi:

    SELECT
      COUNT(DATA1 > 0 OR NULL) +
      COUNT(DATA2 > 0 OR NULL) +
      COUNT(DATA3 > 0 OR NULL) +
      COUNT(DATA4 > 0 OR NULL) +
      COUNT(DATA5 > 0 OR NULL) +
      COUNT(DATA6 > 0 OR NULL) +
      COUNT(DATA7 > 0 OR NULL) AS TOTAL
    FROM yourtable
    ;
    

    (OR NULL trik dijelaskan di sini .)

  2. Lepas DATA kolom menggunakan gabungan silang ke tabel virtual, lalu terapkan kondisi ke kolom yang tidak dipilih:

    SELECT
      COUNT(*) AS TOTAL
    FROM (
      SELECT
        CASE s.col
          WHEN 'DATA1' THEN DATA1
          WHEN 'DATA2' THEN DATA2
          WHEN 'DATA3' THEN DATA3
          WHEN 'DATA4' THEN DATA4
          WHEN 'DATA5' THEN DATA5
          WHEN 'DATA6' THEN DATA6
          WHEN 'DATA7' THEN DATA7
        END AS DATA
      FROM yourtable
      CROSS JOIN (
        SELECT 'DATA1' AS col
        UNION ALL SELECT 'DATA2'
        UNION ALL SELECT 'DATA3'
        UNION ALL SELECT 'DATA4'
        UNION ALL SELECT 'DATA5'
        UNION ALL SELECT 'DATA6'
        UNION ALL SELECT 'DATA7'
      ) s
    ) s
    WHERE DATA > 0
    ;
    

    (Di satu sisi, ini mirip dengan saran @bluefeet, hanya saja tidak menggunakan UNION apa pun.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL Workbench - KESALAHAN:Kesalahan 1215:Tidak dapat menambahkan batasan kunci asing

  2. Setel PDO untuk membuang pengecualian secara default

  3. Injeksi MySQL oleh operator LIKE

  4. Hapus otomatis Baris Data Kedaluwarsa di MySQL

  5. Apakah SET CHARACTER SET utf8 diperlukan?