Сгруппировать по результатам подсчета

#sql #sql-server #tsql

Вопрос:

Во-первых, это связано с Microsoft SQL Server 2014

У меня есть две таблицы в базе данных: Отгрузка и упаковка. Каждая отгрузка имеет идентификатор отгрузки, а каждая посылка имеет как идентификатор отгрузки, так и идентификатор упаковки. Отправление может состоять из более чем одной посылки, т. е. несколько посылок могут иметь один и тот же идентификатор отправки.

Я пытаюсь подсчитать количество отправлений, которые у меня есть, на количество посылок.

Итак, что-то вроде этого:

Подсчитайте Пакеты Количество отправлений
1 1,000,000
2 250,000
3 100,000
4 5,000
5 1,000

Я выяснил, как получить количество посылок для каждой Отправки_ID, что я и сделал следующим образом:

 SELECT s.Shipment_ID, COUNT(p.Package_ID)
FROM Shipment s
LEFT JOIN Package p ON s.Shipment_ID = p.Shipment_ID
GROUP BY s.Shipment_ID
 

Вот где я застрял. Я не могу понять, как свести это к количеству отправлений для каждого количества посылок.

Моей первой мыслью было как-то сгруппироваться COUNT(p.Package_ID) , но агрегатные функции нельзя использовать в группе by.

У кого-нибудь есть какие-нибудь идеи, как я могу это сделать?

Комментарии:

1. Я не понимаю, чего вы здесь добиваетесь. Примеры данных, дополняющие ваши ожидаемые результаты, помогут нам помочь вам здесь.

Ответ №1:

Используйте свой запрос в качестве подзапроса и добавьте сверху другой запрос.

 SELECT ShipmentCount, COUNT(*)
FROM (
    SELECT s.Shipment_ID, COUNT(p.Package_ID) ShipmentCount
    FROM Shipment s
    LEFT JOIN Package p on s.Shipment_ID = p.Shipment_ID
    GROUP BY s.Shipment_ID
) X
GROUP BY ShipmentCount;