Как подсчитать уникальные записи и получить количество этих уникальных элементов в таблице с помощью SQL?

Представьте, что у меня есть таблица вроде этого:

ID: Продукт: shop_id

1: Баскетбол: 41

2: Футбол: 41

3: Ракетный: 45

4: Автомобиль: 86

5: Plane: 86

Теперь это пример большого интернет-центра, где есть магазины, которые продаются одному клиенту, поэтому клиент может выбрать больше продуктов из каждого магазина и купить его в одной корзине.

Однако я не уверен, есть ли какой-либо синтаксис SQL, который позволяет мне просто получить уникальные shop_ids и общее количество продуктов этих магазинов в корзине клиентов. Поэтому я бы получил что-то вроде:

Магазин 41 имеет 2 продукта

Магазин 45 один продукт

Магазин 86 двух продуктов

Я могу заставить SQL-запросы зачерпнуть через таблицу, чтобы сделать какую-то переменную массива ['shop_id'] ['number_of_products'], которая будет хранить все продукты shop_ids, а затем "уникальные" - вверх и подсчитать, сколько раз я пришлось вырезать еще один shop_id, чтобы иметь некоторые оставшиеся, но это кажется просто бесполезным сценарием.

Если у вас есть хорошая и аккуратная идея, пожалуйста, дайте мне знать.

Ответы

Ответ 1

Это именно то, для чего предназначены агрегатные функции. Вы делаете одну строку вывода для каждой группы строк в таблице. Группируйте их по shop_id и подсчитайте количество строк в каждой группе.

select shop_id, count(1) from TABLE_NAME
  group by shop_id