RFM анализ. подсчет общего кол-ва пользователей и суммы
Как правильно вывести общую сумму по полю price и count(distinct user_id) из таблицы
SELECT o.user_id, count(id_o), SUM(price), datediff('2018-01-01', DATE_FORMAT(max(o_date),"%Y-%m-%d")) as days,
CASE WHEN datediff('2018-01-01', DATE_FORMAT(max(o_date),"%Y-%m-%d")) <= 30 THEN "3"
WHEN datediff('2018-01-01', DATE_FORMAT(max(o_date),"%Y-%m-%d")) BETWEEN 31 AND 60 THEN "2"
ELSE "1"
END AS R,
CASE WHEN COUNT(id_o) >= 5 THEN "3"
WHEN COUNT(id_o) >= 2 AND COUNT(id_o) < 5 THEN "2"
ELSE "1"
END AS F,
t.M
FROM shop_1.orders_lessons_1 as o
join
(SELECT user_id,
CASE WHEN sum(price) >= 20000 THEN "3"
WHEN sum(price) < 20000 and sum(price) >= 10000 THEN "2"
ELSE "1"
END AS M
FROM shop_1.orders_lessons_1 group by user_id) as t
on o.user_id = t.user_id
group by user_id
having R != "1" and F != "3" and t.M != "3"
order by user_id;
я пыталась сделать таким образом:
SELECT count(distinct user_id), sum(price)
from shop_1.orders_lessons_1 as shop
join
(табл.выше) as tabl
on shop.user_id = tabl.user_id
having R != "1" and F != "3" and t.M != "3";
но выдает ошибку
50000 Error Code: 1052. Column 'user_id' in field list is ambiguous 0,035 sec
Ответы (1 шт):
Автор решения: Ольга Паршина
→ Ссылка
Добавила алиас, как рекомендовали. Вот полный код, возможно кому-нибудь пригодится
SELECT count(distinct shop.user_id), sum(shop.price)
from shop_1.orders_lessons_1 as shop
join
(SELECT o.user_id, count(id_o), SUM(price), datediff('2018-01-01', DATE_FORMAT(max(o_date),"%Y-%m-%d")) as days,
CASE WHEN datediff('2018-01-01', DATE_FORMAT(max(o_date),"%Y-%m-%d")) <= 30 THEN "3"
WHEN datediff('2018-01-01', DATE_FORMAT(max(o_date),"%Y-%m-%d")) BETWEEN 31 AND 60 THEN "2"
ELSE "1"
END AS R,
CASE WHEN COUNT(id_o) >= 5 THEN "3"
WHEN COUNT(id_o) >= 2 AND COUNT(id_o) < 5 THEN "2"
ELSE "1"
END AS F,
t.M
FROM shop_1.orders_lessons_1 as o
join
(SELECT user_id,
CASE WHEN sum(price) >= 20000 THEN "3"
WHEN sum(price) < 20000 and sum(price) >= 10000 THEN "2"
ELSE "1"
END AS M
FROM shop_1.orders_lessons_1 group by user_id) as t
on o.user_id = t.user_id
group by user_id
having R = "1") as s
on shop.user_id = s.user_id;