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

Conta valori numerici consecutivi in ​​SQL

Questa è una forma di problema delle lacune e delle isole. Puoi assegnare ogni 0 un gruppo contando il numero di valori diversi da zero prima di esso. Quindi aggrega.

Tuttavia, le tabelle SQL rappresentano non ordinate imposta. Non c'è ordinamento a meno che una colonna non specifichi l'ordinamento. Suppongo che tu ne abbia uno. Quindi:

select count(*)
from (select t.*,
             sum(values <> 0) over (partition by idnumber order by <ordering col>) as grp
      from t
     ) t
where values = 0
group by idnumber, grp;