gpt4 book ai didi

sql - 将当前行值用于子查询

转载 作者:行者123 更新时间:2023-12-04 22:02:07 25 4
gpt4 key购买 nike

我正在尝试计算 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 中的唯一键 table 。所以,内部子查询不会做任何事情。也许你的意思是类似 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”是外部查询中订单的别名。不需要相关的子查询。您应该简化查询。

关于sql - 将当前行值用于子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16216129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com