У меня есть следующая таблица 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
?
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)
, чтобы увидеть примеры значений.