Имеется база с записями camp, random_id, action. camp может повторяться, так же как и random_id. action принимает только два значения 0\1. Необходимо извлечь количество уникальных random_id для каждого из значений action (0/1) и соответствующий им camp. Вывод сгруппировать по camp.
Что я только не пробовал. Просто посчитать уникальные random_id для каждого из значений action в отдельности можно запросом
SELECT camp, COUNT(DISTINCT random_id) FROM table WHERE action = 0 group by camp
Но чтобы все в совокупности просчитывалось - не выходит никак. Запрос итоговый
SELECT camp, SUM(IF(action = '0', 1, 0)) as uniq_null, SUM(IF(action = '1', 1, 0)) as uniq_one FROM (SELECT DISTINCT camp, random_id FROM table) t GROUP BY camp
выдает ошибку
#1054 - Unknown column 'action' in 'field list'
Либо
SELECT camp, SUM(IF(action = '0', 1, 0)) as uniq_null, SUM(IF(action = '1', 1, 0)) as uniq_one FROM table GROUP BY camp
Но такой запрос выдает количество НЕ уникальных значений.
Есть у кого предположения, как можно одним запросом получить нужные данные?
РЕШЕНИЕ ВОПРОСА:
SELECT camp, COUNT( DISTINCT random_id), action FROM table group by camp, action