sql >> Databáze >  >> RDS >> Oracle

jak načíst nepřetržitý počet výskytů hodnoty sloupce v SQL?

Za prvé, v SQL podle definice data nemají žádné pořadí, pokud není ORDER BY se používá.
Viz:Wikipedie – Objednat podle

Do tabulky musíte zadat další sloupec, který určuje pořadí a lze jej použít v ORDER BY klauzule, napříkladRN sloupec v níže uvedeném příkladu:

        RN CS_ID     
---------- ----------
         1 a         
         2 b         
         3 a         
         4 a         
         5 a         
         6 b         
         7 b         
         8 b         
         9 b   

Pro výše uvedená data můžete použít Common Table Expression (rekurzivní dotaz), abyste získali požadovaný výsledek, například níže uvedený dotaz funguje na databázi Oracle:

WITH my_query( RN, cs_id , cont ) AS (

    SELECT t.rn, t.cs_id, 1
        FROM My_table t
        WHERE rn = 1
    UNION ALL
    SELECT t.rn, t.cs_id,
         case when t.cs_id = m.cs_id
              then m.cont + 1
              else 1
         end
        FROM My_table t
        JOIN my_query m
        ON t.rn = m.rn + 1
)
select * from my_query
order by rn;

        RN CS_ID            CONT
---------- ---------- ----------
         1 a                   1
         2 b                   1
         3 a                   1
         4 a                   2
         5 a                   3
         6 b                   1
         7 b                   2
         8 b                   3
         9 b                   4



  1. Jak převést DB tabulku se vztahem nadřazeného syna na vícerozměrné pole

  2. Výpočet průměrných nákladů na zásoby v SQL

  3. Jak odstraním první 3 znaky v mysql?

  4. Postgres ručně mění sekvenci