Mysql 每个客户返回一行的Sql查询

Mysql 每个客户返回一行的Sql查询,mysql,Mysql,这是比萨饼订单样本数据库,列名为Customerid、Orderdate、Orderid、Orderitemid、cancelled、size、toppings。当尝试获取每个客户一行的结果时,列customerid、首次订单日期、比萨饼订单总数以及是否取消任何比萨饼订单。我得到这个代码的结果 Select customerid , min(orderdate) as first order date , case when cancelled = ‘N‘

这是比萨饼订单样本数据库,列名为Customerid、Orderdate、Orderid、Orderitemid、cancelled、size、toppings。当尝试获取每个客户一行的结果时,列customerid、首次订单日期、比萨饼订单总数以及是否取消任何比萨饼订单。我得到这个代码的结果

Select customerid
     , min(orderdate) as first order date
     , case when cancelled = ‘N‘
          then count(orderid) else 0 end as total pizza orders
     , case when cancelled = ‘Y’ 
          then ‘Yes’ else ‘No‘ End as cancelled orders  
  from Orders 
 group 
    by customerid;
我收到三份相同的客户ID,分别是第一次订单日期、第二次订单日期和第三次订单日期


同样,对于第一个订单日期的同一个customerid,如果他同时取消并交付了订单,我不会收到取消的订单。

听起来您需要按customerid进行分组。。此外,计数逻辑应包含在聚合函数中,如:

SELECT customerid,
   min(orderdate) AS FIRST ORDER date, 
   count(*) AS total_orders,
   count(CASE 
            WHEN cancelled='Y' 
            THEN 1
            END) AS cancelled_orders
FROM orders o
WHERE to_days(orderdate)=
    (SELECT min(to_days(orderdate))
     FROM orders
     WHERE customerid=o.customerid)
GROUP BY customerid
编辑:根据您的评论添加where子句


当我们使用count(*)时,我得到该客户的所有订单,但我只想要第一个订单日期的订单。另外,我想要在第一个订单日期取消的订单。如果一个客户在第一个订单日期有3个相同的订单项目(3个订单),并且取消了一个,那么我也应该得到那个客户。我误解了。如果你只关心客户的第一份订单,你需要在clauseIt工作的地方限制你的结果。非常感谢。请阅读并编辑您的问题