#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