Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL统计计数结果_Sql - Fatal编程技术网

SQL统计计数结果

SQL统计计数结果,sql,Sql,我正试图从销售中生成我想在DataStudio中显示的报告。我有电子邮件栏、订单号和总价,我正在尝试使用sql查询识别以下内容: 重复和新客户数量(计算订单数量,如果订单>1,则重复,否则为新) 来自重复客户和新客户的订单数 我所做的只是计算每封电子邮件的订单数量 SELECT email, count(email) as order_count, date FROM orders GROUP BY email 这是我想展示的示例报告 Repeating Customer | New

我正试图从销售中生成我想在DataStudio中显示的报告。我有电子邮件栏、订单号和总价,我正在尝试使用sql查询识别以下内容:

  • 重复和新客户数量(计算订单数量,如果订单>1,则重复,否则为新)
  • 来自重复客户和新客户的订单数
  • 我所做的只是计算每封电子邮件的订单数量

    SELECT email, count(email) as order_count, date FROM orders GROUP BY 
    email
    
    这是我想展示的示例报告

        Repeating Customer | New Customer  
            1              |       2
    
    
        Orders from Repeating Cust. | Orders from New Customer
              2                     |    2
    
    
        Total Price Repeating Cust. | Total Price New Custo.
              200                   |      330
    

    非常感谢您的帮助。

    使用两个单独的查询,一个用于重复查询,另一个用于新客户查询,然后简单地加入它们以创建您的报告

    重复客户

    SELECT email, COUNT(email), SUM(TotalPrice) as order_count FROM orders GROUP BY email HAVING COUNT(email) > 1
    
    SELECT email, SUM(TotalPrice) as order_count FROM orders GROUP BY email HAVING COUNT(email) = 1
    
    新客户

    SELECT email, COUNT(email), SUM(TotalPrice) as order_count FROM orders GROUP BY email HAVING COUNT(email) > 1
    
    SELECT email, SUM(TotalPrice) as order_count FROM orders GROUP BY email HAVING COUNT(email) = 1
    

    如果您使用前端技术来显示这些结果,那么您也可以在前端将这些结果编译为水平方向(重复和新客户在两列而不是两行中)。如果要在纯SQL中执行此操作,只需交叉连接两个查询即可获得输出。

    您可以尝试大小写和子查询:

    SELECT SUM(CASE WHEN t.Cust_cnt=1 THEN 1 ELSE 0 END) AS New_Cust,
           SUM(CASE WHEN t.Cust_cnt>1 THEN 1 ELSE 0 END) AS Repeat_Cust,
           SUM(CASE WHEN t.Cust_cnt=1 THEN t.Total_Order ELSE 0 END) AS New_Cust_Order,
           SUM(CASE WHEN t.Cust_cnt>1 THEN t.Total_Order ELSE 0 END) AS Repeat_Cust_Order,
           SUM(CASE WHEN t.Cust_cnt=1 THEN t.Total_Price ELSE 0 END) AS New_Cust_Order_Total_Price,
           SUM(CASE WHEN t.Cust_cnt>1 THEN t.Total_Price ELSE 0 END) AS Repeat_Cust_OrderTotal_Price,
           t.Last_Order_Date
    FROM (
    SELECT COUNT(Email) AS Cust_cnt,SUM(O_Price) AS Total_Price,COUNT(O_Number) AS Total_Order, MAX(O_Date) AS Last_Order_Date, Email  FROM Orders Group by Email) AS t;
    

    它可能为GROUP BY子句提供错误,并且包含未聚合的列“orders.date”,该列在功能上不依赖于GROUP BY中的列clause@FrustratedDeveloper:啊,是的,把它们拿走了,因为输出不需要它们。我怎么能包括日期?你可以选择我在回答中编辑的
    max
    min
    日期,但是根据你的帖子,你也可以使用
    订单号
    代替
    电子邮件