Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak liczyć wartości poziome w bazie danych?

Nie ma wbudowanej składni, która pozwalałaby na dynamiczne odwoływanie się do zestawu kolumn, tj. bez jawnego ich nazywania. Jeśli zależy Ci na dynamice, musisz użyć metadanych zapytań, aby pobrać wymagane nazwy kolumn, a następnie dynamicznie zbudować ostateczne zapytanie.

Ale zanim to nastąpi, nadal będziesz musiał mieć pomysł, jak dokładnie dynamiczne zapytanie powinno wykonać samo zadanie. Zatem najpierw musisz rozwiązać problem w skończonym zestaw kolumn.

Jest więcej niż jeden sposób na rozwiązanie tego problemu. metoda sugerowana przez @bluefeet jest prawdopodobnie jednym z jaśniejszych i mniej wydajnych. Możesz wypróbować co najmniej dwie alternatywy:

  1. Policz każdą kolumnę osobno za pomocą agregacji warunkowej i zsumuj wszystkie wyniki w jednym wyrażeniu:

    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 sztuczka jest wyjaśniona tutaj .)

  2. Odwróć DATA kolumny za pomocą sprzężenia krzyżowego z wirtualną tabelą, a następnie zastosuj warunek do kolumny nieprzestawnej:

    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
    ;
    

    (W pewnym sensie jest to podobne do sugestii @bluefeet, po prostu nie wykorzystuje żadnych UNION).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobierz pojedynczy element z ciągu listy w MySQL

  2. Problem z przesłaniem formularza... Wprowadź klucz

  3. Wybierz dane z różnych kolumn i dwóch tabel

  4. Używanie mysql_real_escape_string z PDO (brak połączenia z serwerem localhost)

  5. Wyświetl mysql w tabeli html za pomocą Node.js