【发布时间】:2020-06-15 09:51:39
【问题描述】:
我有 1 个名为 order_star_member 的表,其中包含 createdAt 作为交易日期,users_id 作为买家,total_price_star_member 作为交易金额。在这种情况下,我想找出拥有明星会员的买家(一个月内的交易> = 600000)并找出他们来自哪里,order_star_member 的数据(虚拟)从 2019 年 1 月到 2019 年 3 月开始
CREATE TABLE order_star_member ( users_id INT,
createdAt DATE,
total_price_star_member DECIMAL(10,2) );
INSERT INTO order_star_member VALUES
(12,'2019-01-01',100000),
(12,'2019-01-10',100000),
(12,'2019-01-20',100000),
(12,'2019-02-10',100000),
(12,'2019-02-15',300000),
(12,'2019-02-21',500000),
(13,'2019-01-02',900000),
(13,'2019-01-11',300000),
(13,'2019-01-18',400000),
(13,'2019-02-06',100000),
(13,'2019-02-08',900000),
(13,'2019-02-14',400000),
(14,'2019-01-21',500000),
(14,'2019-01-23',200000),
(14,'2019-01-24',300000),
(14,'2019-02-08',100000),
(14,'2019-02-09',200000),
(14,'2019-02-14',100000),
(15, '2019-03-04',1000000),
(14, '2019-03-04', 300000),
(14, '2019-03-04', 350000),
(13, '2019-03-04', 400000),
(15, '2019-01-23', 620000),
(15, '2019-02-01', 650000),
(12, '2019-03-03', 750000),
(16, '2019-03-04', 650000),
(17, '2019-03-03', 670000),
(18, '2019-02-02', 450000),
(19, '2019-03-03', 750000);
SELECT * from order_star_member;
然后我每月汇总数据
-- summary per-month data
SELECT users_id,
SUM( CASE WHEN MONTHNAME(createdAt) = 'January'
THEN total_price_star_member
END ) total_price_star_member_January,
SUM( CASE WHEN MONTHNAME(createdAt) = 'February'
THEN total_price_star_member
END ) total_price_star_member_February,
SUM( CASE WHEN MONTHNAME(createdAt) = 'March'
THEN total_price_star_member
END ) total_price_star_member_March
FROM order_star_member
GROUP BY users_id
ORDER BY 1;
在这种情况下,我想找出三月份每个明星成员的分布情况(一个月内交易的用户 ID >= 600000),以及三月份之前进行交易的用户 ID >= 600.000(如果用户 ID 在第一次在三月,然后users_Id进入三月到三月统计)
expected results for star member on month march statistics
+-------------------+------+-------+
| count star_member | year | month |
+-------------------+------+-------+
| 2 | 2019 | 1 |
| 1 | 2019 | 2 |
| 3 | 2019 | 3 |
+-------------------+------+-------+
解释:有 2 个 users_Id 在 3 月成为 star_member (users_Id 14,15) 并在 2019 年 1 月成为他的第一个 star_member, 有 1 个 users_id 在 3 月成为 star_member(users_id 12)并在 2019 年 2 月成为他的第一个 star_member, 并且有 3 个 users_id 在 3 月成为 star_member(users_id 16、17、19)并在 2019 年 3 月成为他的第一个 star_member
这是我目前的进度语法
select count(osm.users_id) as count_buyer, year(osm.createdAt) as year,
month(osm.createdAt) as month
from order_star_member osm
WHERE osm.createdAt >= MAKEDATE(YEAR(osm.createdAt), 1)
+ INTERVAL month(osm.createdAt) month- INTERVAL 1 month AND
osm.createdAt <= MAKEDATE(YEAR(osm.createdAt), 1)
+ INTERVAL month(osm.createdAt) month- INTERVAL 1 day group by users_Id
having sum(total_price_star_member) >= 600000
AND
NOT EXISTS (SELECT 1 from order_star_member osm2
WHERE osm2.users_id = osm.users_id
AND osm2.createdAt < MAKEDATE(YEAR(osm.createdAt), 1) +
INTERVAL month(osm.createdAt) month - INTERVAL 1 month
group by users_id
having sum(total_price_star_member) >= 600000)
AND
EXISTS (SELECT 1 from order_star_member osm3
where
osm3.users_id = osm.users_id AND
osm3.createdAt >= '2019-03-01' AND
osm3.createdAt < '2019-04-01' group by users_id
having sum(total_price_star_member) >= 600000)
group by year(osm.createdAt), month(osm.createdAt);
这是小提琴 https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=d642774357900f967d7af9659d8639d7
【问题讨论】:
-
我忘了编辑解释,对不起,我刚刚编辑了它
-
嗯...
users_id=13没有被计算在内,因为他没有在 3 月份出演??? -
是的,因为我想在 3 月份进行统计,并且 users_id 13 没有被计算在内,因为他们不是 3 月份的明星会员(交易 >= 600000)
标签: mysql mysql-workbench mysql-error-1064