我试图计算order_Id出现在子查询中的次数,然后将其显示在每个客户订单的平均值旁边.这是我尝试过的.
select person ,AVG(orderTotal) as avgOrdersValue , timesSeen 
from 
    (
select  
Customer_Id as person 
,Order_Id
, SUM(total)as orderTotal 
,(select COUNT(Order_Id) as timesSeen  
from Orders where  Customer_Id=person  group by Order_Id
    )
from Orders group by Customer_Id  Order_Id order by person ) tablealias 
group by person 
以下是我得到的消息:" 消息207,级别16,状态1,行4无效列名'人'.消息8155,级别16,状态2,行10没有为'gg'的列4指定列名.消息207,级别16,状态1,行1无效的列名称'timesSeen'. "
根据您的描述,这可能是您想要的查询:
select person, AVG(OrderTotal), COUNT(distinct orderId)
from (select Customer_id as person, Order_id, SUM(total) as OrderTotal
      from Orders
      group by Customer_Id, Order_Id
     ) o
group by person 
我说"可能"因为我希望OrderId成为Orders表中的一个独特键.所以,内部子查询不会做任何事情.也许你的意思是OrderLines在内部查询中.
您的查询失败的原因是因为相关语句:
where Customer_Id = person
您打算使用外部查询("person")中的值与内部查询("Customer_Id")相关联.但是,内部查询不知道select外部查询的子句中的别名.所以,"人"是未定义的.在执行相关子查询时,应始终使用表别名.该查询看起来应该更像:
(select COUNT(o2.Order_Id) as timesSeen  
 from Orders o2 where  o2.Customer_Id=o.person 
 group by o2.Order_Id
)
假设"o"是外部查询中的订单的别名.不需要相关的子查询.您应该简化查询.