Mysql
 sql >> база данни >  >> RDS >> Mysql

как да броим хоризонтални стойности в база данни?

Няма вграден синтаксис, който да ви позволи да се позовавате на набор от колони динамично, т.е. без изрично да ги наименувате. Ако искате динамичност, ще трябва да заявите метаданни, за да вземете необходимите имена на колони, след което да изградите динамично крайната заявка.

Но преди това все пак ще трябва да имате представа как точно трябва да действа динамичната заявка за изпълнение на самата работа. Така че първо ще трябва да решите проблема на ограничен набор колони.

Има повече от един начин за решаване на този проблем. Методът, предложен от @bluefeet вероятно е един от по-ясните, както и по-малко ефективни. Можете да опитате поне две алтернативи:

  1. Пребройте всяка колона отделно, като използвате условно агрегиране и сумирайте всички резултати в един израз:

    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 трикът е обяснен тук .)

  2. Развъртете DATA колони с помощта на кръстосано присъединяване към виртуална таблица, след което приложете условието към колоната без завъртане:

    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
    ;
    

    (В известен смисъл това е подобно на предложението на @bluefeet, просто не използва съюзи.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSP, MySQL и UTF-8

  2. 10 полезни съвета за настройка на производителността на MySQL

  3. Каква е разликата между MySQL и MySQL2 предвид NodeJS

  4. org.hibernate.MappingException:съпоставянето на свойства има грешен брой колони в ENUM обект

  5. Как да проверя дали връзката ми C# — MySQL е била успешна или, ако не, да върна защо?