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

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

id:Product:shop_id

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

2: Футбол: 41

3: Ракета: 45

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

5: самолет: 86

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

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

В магазине 41 2 товара

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

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

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

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


person Skuta    schedule 26.10.2008    source источник


Ответы (1)


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

select shop_id, count(1) from TABLE_NAME
  group by shop_id
person Andru Luvisi    schedule 26.10.2008
comment
(1) после Count означает, какой параметр после SELECT должен быть подсчитан? - person Skuta; 26.10.2008
comment
Нет, (1) не является ссылкой на какой-либо столбец, это просто целочисленное значение 1. Более типично использовать COUNT(*) или COUNT(columnname). Glomek использует COUNT(1) как постоянное целочисленное значение, потому что некоторые считают, что это быстрее, чем обращение к столбцу. - person Bill Karwin; 26.10.2008
comment
Оптимизатор должен позаботиться о том, чтобы count(*) занимал столько же времени, сколько и count(1). Я предполагаю, что некоторые оптимизаторы этого не делают. - person yfeldblum; 26.10.2008
comment
Большое спасибо, ребята, очень помогли! Дай Бог здоровья всем, кто помогает - person Skuta; 26.10.2008
comment
... и вы можете добавить `порядок по количеству (1);' к.. эээ.. порядок по счету :P - person Cyrus; 13.07.2012