我想创建一个SQL查询,列出所有订单数量高于平均水平的客户
SQL查询所有下订单数量高于平均值的客户的列表 订单详细信息显示在NW_订单表中,客户信息显示在NW_客户表中 首先,我计算了所有客户下订单的平均数量。然后我只想拉下订单数量大于平均订单数量的客户 我的问题是:我想创建一个SQL查询,列出所有订单数量高于平均水平的客户,sql,oracle,join,Sql,Oracle,Join,SQL查询所有下订单数量高于平均值的客户的列表 订单详细信息显示在NW_订单表中,客户信息显示在NW_客户表中 首先,我计算了所有客户下订单的平均数量。然后我只想拉下订单数量大于平均订单数量的客户 我的问题是: SELECT C.customerid, C.companyname, COUNT(O.orderid) AS cnt FROM NW_customers C LEFT JOIN NW_orders O ON O.customerID = C.Custome
SELECT
C.customerid, C.companyname, COUNT(O.orderid) AS cnt
FROM
NW_customers C
LEFT JOIN
NW_orders O ON O.customerID = C.Customerid
GROUP BY
C.customerid
HAVING
cnt > (SELECT COUNT(O.OrderID) / COUNT(DISTINCT(c.customerid)) AS Avg
FROM NW_orders O
LEFT JOIN NW_customers C ON O.customerID = C.Customerid)
我犯了一个错误
ORA-00904:“CNT”:无效标识符
有人能帮忙纠正错误吗 使用通用表表达式:
WITH cte AS (
SELECT o.customerid, COUNT(o.orderid) AS cnt
FROM NW_orders o
GROUP BY o.customerid
)
SELECT t.customerid
FROM cte t
WHERE t.cnt > (SELECT AVG(cnt) FROM cte)
如果要引入实际的客户信息,可以向上述查询添加联接:
SELECT t1.*, t2.*
FROM cte t1
INNER JOIN NW_customers t2
ON t1.customerid = t2.customerid
WHERE t1.cnt > (SELECT AVG(cnt) FROM cte)
使用公共表表达式:
WITH cte AS (
SELECT o.customerid, COUNT(o.orderid) AS cnt
FROM NW_orders o
GROUP BY o.customerid
)
SELECT t.customerid
FROM cte t
WHERE t.cnt > (SELECT AVG(cnt) FROM cte)
如果要引入实际的客户信息,可以向上述查询添加联接:
SELECT t1.*, t2.*
FROM cte t1
INNER JOIN NW_customers t2
ON t1.customerid = t2.customerid
WHERE t1.cnt > (SELECT AVG(cnt) FROM cte)
这是解析函数的经典 角质体 完整的客户信息 完整的客户信息+订单信息
这是解析函数的经典 角质体 完整的客户信息 完整的客户信息+订单信息
Tim,抛开不使用分析功能不谈,
NW_客户
如果您只想检索customerid
,根本不需要,因为只有有订单的客户可能下了高于平均数的订单。Tim,抛开不使用分析功能不谈,如果您希望仅检索customerid
,则根本不需要NW_客户
,因为只有有订单的客户可能下了高于平均水平的订单。
select o.customer_orders
,o.avg_customer_orders
,c.*
from NW_customers c
join (select customerID
,count(*) as customer_orders
,avg (count(*)) over () as avg_customer_orders
from NW_orders
group by customerID
) o
on o.customerID =
c.customerID
where o.customer_orders > o.avg_customer_orders
;