【问题标题】:SQL : get number of user but order date [closed]SQL:获取用户数量但订单日期[关闭]
【发布时间】:2020-11-06 16:20:55
【问题描述】:

我试图获取与第一个订单相比,我在精确的一天获得了多少用户 例如:

"2020-02" = 20, "2020-03" = 20 ... etc... 

我做了一个这样的 sql 查询:

SELECT o.order_id, u.id as userId, DATE_FORMAT(FROM_UNIXTIME(o.order_created),'%Y-%m'), COUNT(u.id) as userCount
FROM users u
LEFT JOIN order_product o ON o.order_user_id = u.id
GROUP BY u.id;

但是对于这个查询,我有类似这样的例子:

"2020-02" = 2, "2020-02" = 9, "2020-03" = 5, "2020-03" = 7

所以我尝试 group by u.idDATE_FORMAT(FROM_UNIXTIME(o.order_created),'%Y-%m') 喜欢这个例子:

SELECT o.order_id, u.id as userId, DATE_FORMAT(FROM_UNIXTIME(o.order_created),'%Y-%m'), COUNT(u.id) as userCount
FROM users u
LEFT JOIN order_product o ON o.order_user_id = u.id
GROUP BY u.id, DATE_FORMAT(FROM_UNIXTIME(o.order_created),'%Y-%m');

但它仍然不起作用,在第 2 种情况下,'userCount' 的结果不好。

所以我的问题是,我怎样才能在特定月份将多个用户分组?

【问题讨论】:

    标签: mysql sql doctrine


    【解决方案1】:

    认为您要求的是一个非常简单的聚合:

    SELECT DATE_FORMAT(FROM_UNIXTIME(o.order_created), '%Y-%m') as yyyymm, 
           COUNT(*) as num_orders,
           COUNT(DISTINCT o.order_user_id) as num_users
    FROM users u
    GROUP BY yyyymm;
    

    我有点困惑,为什么您在不使用该表的情况下加入 order_products。而且连接条件也没有意义。

    【讨论】:

    • 谢谢,我觉得很好,以后我会做更多的测试。 LEFT JOIN 是为了获取用户的顺序。在我的示例中,我没有添加所有查询,我使用“位置”来获取特定用户
    猜你喜欢
    • 2012-06-07
    • 2020-10-13
    • 1970-01-01
    • 2012-05-13
    • 2019-06-14
    • 2023-01-21
    • 2016-05-10
    • 2017-07-02
    • 2023-03-26
    相关资源
    最近更新 更多