#sql #group-by #count #aggregate-functions
#sql #группировка по #подсчитывать #агрегатные функции
Вопрос:
У меня есть список предметов (например, рубашки, топы, брюки, adidas, nike, puma, губная помада, средство для мытья лица и т. Д.), И я классифицировал их как (рубашки, топ, брюки = одежда, nike, adidas, puma = обувь, губная помада и т. Д. = макияж) и годы в форматекак это 2017-01-01. Я хочу узнать, сколько раз в одну и ту же дату было два типа покупок, например, если я купил косметику и одежду в 2018-02-01, тогда я хочу посчитать это как 1 для категории «макияж одежда», если я купил обувь и косметику в 2017-09-06, тогда я хочу посчитать, чтокак 1 для категории «обувь макияж»
Как я могу это сделать?
У меня есть следующая таблица с именем Items:
Year | Purchases |
------------------
2017-02-01 | makeup
2018-10-01 | shoes
2019-03-01 | makeup
2017-11-01 | shoes
2017-02-01 | clothing
2016-01-01 | shoes
2018-10-01 | clothing
2017-11-01 | clothing
2019-01-01 | makeup
2016-01-01 | makeup
Желаемый результат выглядит примерно так:
Year | Purchases | Count
-----------------------
2016 | Shoes makeup | 1
2017 | Makeup clothing | 1
2017 | shoes Clothing | 2
2018 | Shoes clothing | 1
...
Комментарии:
1. Пожалуйста, укажите имя базы данных в вашем вопросе. Функции SQL сильно зависят от поставщика.
Ответ №1:
Вот один из подходов, использующих самосоединение и агрегирование:
select extract(year from t1.date) yr, t1.purchases purchases_1, t2.purchases purchases_2, count(*) cnt
from mytable t1
inner join mytable t2 on t2.date = t1.date and t2.purchases < t1.purchases
group by extract(year from t1.date), t1.purchases, t2.purchases
Для каждого года подсчитывается, сколько раз два продукта появлялись в одну и ту же дату.
Примечания:
-
нелогично, что должен вызываться столбец, в котором хранится дата
year
; я переименовал егоdate
в запрос -
вы не указали, какую базу данных вы используете;
extract()
для получения года каждой даты используется стандартная функция — не все базы данных поддерживают эту функцию, но у всех есть альтернативы -
запрос помещает элементы в два отдельных столбца — вы можете объединить их в один и тот же столбец, который вам нравится