Как выбрать гистограмму в sql?

У меня есть следующая таблица messages:

destination_number | message_text | pk/sender_number/metadata/timestamps/other_stuff
123                | hi           | ...
456                | at 4         | ...
123                | how are you? | ...
123                | I'm David    | ...
456                | please       | ...
789                | no           | ...
789                | stop         | ...
012                | exit         | ...

делаю select count(1) as quantity, destination_number from messages group by destination_number я получил:

quantity | destination_number
3        | 123
2        | 456
2        | 789
1        | 012

теперь я хотел бы почти гистограмму:

quantity | quantity_of_numbers_that_received_that_quantity
3        | 1                      // only number 123 received 3 messages
2        | 2                      // numbers 456 and 789 received 2 messages
1        | 1                      // only 012 received 1 message

мой вопрос: какой запрос выведет эту последнюю таблицу прямо из messages?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

select quantity, count(destination_number) as quantity_of_numbers_that_received_that_quantity
from (
  select count(1) as quantity, destination_number 
  from messages 
  group by destination_number
)
group by quantity
Ответ принят как подходящий

Если я правильно понимаю, используйте второй уровень агрегации:

select quantity, count(*)
from (select count(1) as quantity, destination_number
      from messages
      group by destination_number
     ) m
group by quantity
order by quantity;

Обычно я добавляю что-то вроде min(destination_number), max(destination_number), чтобы увидеть примеры значений.

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