sql >> Database teknologi >  >> RDS >> Mysql

hvordan man tæller vandrette værdier på en database?

Der er ingen indbygget syntaks, der vil tillade dig at henvise til et sæt kolonner dynamisk, dvs. uden eksplicit at navngive dem. Hvis du vil have dynamik, skal du forespørge om metadata for at få fat i de påkrævede kolonnenavne, og derefter bygge den endelige forespørgsel dynamisk.

Men inden da skal du stadig have en idé om, hvordan den dynamiske forespørgsel præcist skal gå til at udføre selve jobbet. Så du bliver først nødt til at løse problemet på en endelig kolonnesæt.

Der er mere end én måde at løse dette problem på. metoden foreslået af @bluefeet er nok en af ​​de klarere såvel som mindre effektive. Du kan prøve mindst to alternativer:

  1. Tæl hver kolonne separat ved hjælp af betinget aggregering, og læg alle resultater sammen i ét udtryk:

    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 trick er forklaret her .)

  2. Frigør DATA kolonner ved hjælp af en krydsforbindelse til en virtuel tabel, og anvend derefter betingelsen på den ikke-pivoterede kolonne:

    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
    ;
     

    (På en måde ligner dette @bluefeets forslag, det beskæftiger bare ikke nogen UNIONer.)



  1. Deltager i MySQL for at hente data fra flere tabeller

  2. MySQL + PHP:Henter data ved hjælp af fremmednøgler

  3. At udfylde huller i datoer returneret fra database - ren SQL-løsning mulig?

  4. Udforskning af datamodellering (hvordan man hobler en fornuftig database sammen)