Игнорировать дубликаты в GROUP BY

#mysql #sql #grouping

#mysql #sql #группировка

Вопрос:

У меня есть таблица, содержащая shop_id, name и promotion_code. Я хочу получить количество записей для каждого shop_id, но есть несколько повторяющихся записей, в которых promotion_code используется несколько раз. Я хочу их игнорировать.

Я пытался:

SELECT shop_id, count(*) as total_entries FROM tbl GROUP BY shop_id

Это дает мне правильную структуру, но при этом учитываются все повторяющиеся строки. Итак, я подумал, что попробую сгруппировать их сначала по promotion_code, а затем по shop_id:

SELECT shop_id, count(*) as total_entries FROM tbl GROUP BY promotion_code, shop_id

Но это дает мне все нули в качестве результата.

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

1. Добавьте некоторые примеры табличных данных и ожидаемый результат. (Также форматированный текст.)

2. Кстати, невозможно вернуть нули для опубликованного выбора.

Ответ №1:

 SELECT shop_id, count(distinct promotion_code) as total_entries FROM tbl GROUP BY shop_id
  

Ответ №2:

попробуйте :

 select shop_id, count(distinct promotion_code)
from tbl
group by shop_id
  

Ответ №3:

ВЫБЕРИТЕ shop_id, посчитайте (*) как total_entries ИЗ ГРУППЫ tbl ПО promotion_code, shop_id

Вместо использования (*) вы могли бы использовать функцию DISTINCT, чтобы вы были уверены, что все данные, которые вы пытаетесь сгруппировать, являются уникальными значениями.

Вы могли бы сделать что-то вроде этого:

SELECT shop_id, COUNT(DISTINCT promotion_code) as total_entries FROM tbl GROUP BY shop_id