Я пытаюсь создать список пользователей, которые совершили первую покупку в декабре 2018 года и с тех пор потратили более 100 долларов на SQL. Я могу сгенерировать список пользователей, но я не могу определить, какой была их первая покупка или другие переменные, и, похоже, это проблема, поскольку столбцы, которые я пытаюсь включить, не сгруппированы и не агрегированы, поэтому я ' Я надеюсь, что кто-то может указать мне правильное направление, поскольку я новичок в SQL.
Вот мой код для создания списка, в который я хочу добавить больше столбцов:
select billing_address.name, contact_email, min(processed_at) as First_Purchase_Date, sum(total_price) as Total_Revenue
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY id) AS instance
FROM `table.orders`
) orders -- identify duplicate rows
WHERE instance = 1
group by contact_email, billing_address.name
having min(processed_at) between '2019-01-01 00:00:00 UTC' and '2019-02-01 00:00:00 UTC' and sum(total_price) > 100
order by sum(total_price) desc
Есть ли способ изменить это, чтобы вывести покупку каждого пользователя из этого списка в отдельную строку и включить больше столбцов? Поэтому я бы привлек каждого пользователя (и ВСЕ его покупки), у которого есть min(processed_at)
в декабре 2018 г. И их sum(total_price) > 100
? что-то вроде этого:
SELECT contact_email, billing_address, line_items, min(processed_at), sum(total_price) OVER (PARTITION BY contact_email)
FROM (
SELECT *, ROW_NUMBER() OVER(PARTITION BY id) AS instance
FROM `table.orders`
) orders -- identify duplicate rows
WHERE instance = 1
Однако sum(total_price)
в этом случае не работает, и я не могу фильтровать по min(processed_at)
. Может ли кто-нибудь направить меня в правильном направлении?
o
не является функцией, это просто псевдоним для производной таблицы, которая создается каждым подзапросом. Это позволяет нам использовать что-то вродеo.*
для ссылки на все столбцы, возвращаемые подзапросом. 14.11.2019