У меня есть таблица, содержащая данные за год с количеством покупок в месяц на одного клиента. Это выглядит так:
ID MON NUM_PURCHASES
1 1 1
2 1 3
3 1 4
2 2 5
(где ID - идентификатор клиента, mon - месяц в году). Я хочу выбрать все идентификаторы, у которых минимум 1 покупка в месяц в течение года.
Я ищу более элегантное решение, чем (это не работает - см. Мое редактирование 2019-04-03):
SELECT distinct id
FROM my_table
where (num_purchases >= 1 and mon = 1) and
(num_purchases >= 1 and mon = 2) and ...
(num_purchases >= 1 and mon = 12);
(Обратите внимание, что "..." обозначает все значения mon в диапазоне от 1 до 12)
Что может быть более элегантным способом сделать это? Спасибо.
РЕДАКТИРОВАТЬ (2019-04-03):
Я понимаю, насколько нелепым является приведенный выше запрос - он никогда не будет ничего возвращать, если я не преобразую таблицу и не помещу все записи от одного клиента в одну строку: /.
После ответа Вамси я понял, что не упомянул, что моя таблица не содержит записей с 0 покупками за месяц, она содержит только данные (для клиента), если он совершил покупку за месяц (так что некоторые месяцы отсутствуют) ).
Благодаря решению Vamsi я нашел обходной путь:
select id, total_purchases
FROM
(select id, SUM(CAST(mon as int)) as sum_mon, SUM(CAST(num_purchases as int)) as total_purchases
FROM my_table
group by cid) a where sum_mon == 78;
(Это далеко не элегантно - опять же, но, по крайней мере, это работает. Однако это не будет работать для более общих случаев, т. Е. Если у нас будет 0 записей для каждого клиента в таблице или если мы хотим выбрать клиентов, которые сделали 2 или более покупок в месяц. Пока мне это не нужно, но это может быть полезно для тех, кто сталкивается с подобной проблемой.)