SQL - ведро целочисленного столбца и подсчет каждого ведра

У меня есть целочисленный столбец, как показано ниже.

ID
---
1
2
3
..
..
99
100

Я хочу разделить это на 10 строк.

100 rows/10 buckets = 10 different buckets 

Я хочу подсчитать количество строк из каждого ведра.

id    | total rows
----------------
1-10  | 10
11-20 | 10
21-30 | 10
...   | ..
...   | ..
91-100| 10

Я пытаюсь реализовать это с помощью Postgresql и MySQL.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
385
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете попробовать использовать выражение case

select case 
        when id between 1 and 10 then '1-10'
        when id between 11 and 20 then '11-20'
        when id between 21 and 30 then '21-30' end as id, count(*) as total_rows
from tablename
group by case 
          when id between 1 and 10 then '1-10'
          when id between 11 and 20 then '11-20'
          when id between 21 and 30 then '21-30' end

Вы можете использовать функцию truncate следующим образом:

Select concat(min(id),'-',max(id)) as ids, count(1) as total_rows
  From your_table t
Group by truncate(id-1, -1)   
Ответ принят как подходящий

В майкл:

select
    concat(min((id-1) div 10) * 10 + 1, '-', min((id-1) div 10) * 10 + 10) 'id',
    count(id) 'total rows'
from yourtable
group by (id-1) div 10

В постгресе:

select
    (min((id-1) / 10) * 10 + 1) || '-' || (min((id-1) / 10) * 10 + 10) as id,
    count(id) as total_rows
from yourtable
group by (id-1) / 10
order by (id-1) / 10

И в Postgres, и в MySQL должно работать следующее:

select concat_ws('-', ceiling(id / 10.0) * 10 - 9, ceiling(id / 10.0) * 10) as id_range,
       count(*)
from t
group by id_range
order by min(id);

В дополнение к тому, что обе базы данных одинаковы, я также думаю, что это, возможно, самая простая конструкция в любой базе данных.

Вот две скрипки db<>: для Postgres и для MySQL.

Другие вопросы по теме