Как запустить SQL запрос рекурсивно? - PullRequest
0 голосов
/ 27 ноября 2018

Например, есть таблица учетных записей:

account_id | ......    
000        | ......    
001        | ......    
004        | ......    
010        | ......   
.....   
198        | ......    

Я хочу получить распределение идентификаторов учетных записей, вместо того, чтобы снова и снова выполнять следующий запрос, есть ли более разумный способ получить счетчик идентификаторовдля 000-010, 010-020, ..., 190-200?Спасибо

SELECT count(account_id)
FROM accounts
WHERE account_id >= '000' AND  account_id <= '010';

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вы можете разделить account_id на 10, чтобы создать диапазон, а затем сгруппировать по разделенному результату, чтобы получить желаемый результат:

SELECT CONCAT(LPAD(FLOOR(account_id/10)*10,3, '0'), '-', LPAD(FLOOR(account_id/10)*10+9, 3, '0')) AS `range`,
       COUNT(*) AS number
FROM accounts
GROUP BY `range`

Вывод (для некоторых примеров данных в моей демонстрации):

range       number
000-009     3
010-019     2
020-029     1
030-039     1
040-049     1
050-059     2

Демонстрация на dbfiddle

0 голосов
/ 27 ноября 2018
     select t1.account_id ||'-'||t2.
     account_id,count(*) from 
     table t1 where account_id IN (Select account_id from 
      table t2 where t2.account_id-t1.account_id=10)`

Я пытался взять разницу идентификаторов счетов в таблицах с помощью подзапроса

0 голосов
/ 27 ноября 2018

Вы бы использовали group by:

select (case when account_id >= '000' and account_id <= '010' then '000-010'
             when account_id >= '011' and account_id <= '020' then '011-020'
             when account_id >= '021' and account_id <= '030' then '021-030'
             . . .
        end) as account_id_grp,
       count(*)
from accounts
group by account_id_grp
order by account_id_grp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...