Mysql 每个客户返回一行的Sql查询
这是比萨饼订单样本数据库,列名为Customerid、Orderdate、Orderid、Orderitemid、cancelled、size、toppings。当尝试获取每个客户一行的结果时,列customerid、首次订单日期、比萨饼订单总数以及是否取消任何比萨饼订单。我得到这个代码的结果Mysql 每个客户返回一行的Sql查询,mysql,Mysql,这是比萨饼订单样本数据库,列名为Customerid、Orderdate、Orderid、Orderitemid、cancelled、size、toppings。当尝试获取每个客户一行的结果时,列customerid、首次订单日期、比萨饼订单总数以及是否取消任何比萨饼订单。我得到这个代码的结果 Select customerid , min(orderdate) as first order date , case when cancelled = ‘N‘
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工作的地方限制你的结果。非常感谢。请阅读并编辑您的问题