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

làm thế nào để đếm các giá trị ngang trên cơ sở dữ liệu?

Không có cú pháp tích hợp nào cho phép bạn tham chiếu động đến một tập hợp các cột, tức là mà không đặt tên chúng một cách rõ ràng. Nếu bạn muốn tính năng động, bạn sẽ cần truy vấn siêu dữ liệu để lấy tên cột được yêu cầu, sau đó tạo truy vấn cuối cùng một cách động.

Nhưng trước đó, bạn vẫn cần phải có ý tưởng về cách chính xác truy vấn động sẽ thực hiện công việc như thế nào. Vì vậy, trước tiên bạn sẽ cần giải quyết vấn đề trên một hữu hạn tập hợp cột.

Có nhiều cách để giải quyết vấn đề này. phương pháp do @bluefeet đề xuất có lẽ là một trong những cách rõ ràng hơn cũng như kém hiệu quả hơn. Bạn có thể thử ít nhất hai lựa chọn thay thế:

  1. Đếm từng cột riêng biệt bằng cách sử dụng tổng hợp có điều kiện và cộng tất cả các kết quả trong một biểu thức:

    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 thủ thuật được giải thích tại đây .)

  2. Giải nén DATA các cột bằng cách sử dụng liên kết chéo vào một bảng ảo, sau đó áp dụng điều kiện cho cột không được phân chia:

    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
    ;
    

    (Theo một cách nào đó, điều này tương tự như đề xuất của @ bluefeet, nó chỉ không sử dụng bất kỳ UNION nào.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi kết quả UDF

  2. MySQL Xác định độ dài VarChar dài nhất

  3. MYSQL:so sánh ngày NULL với CURRENT_DATE

  4. mysql chọn truy vấn trong đó date =... không trả về dữ liệu

  5. Lưu trữ dữ liệu thống kê, tôi cần DECIMAL, FLOAT hay DOUBLE?