[英]I wanted to create a SQL query to list of all customers who have placed an above average number of orders
SQL查詢以列出所有下單數量高於平均水平的所有客戶。
訂單詳細信息顯示在NW_orders表中,而客戶信息顯示在NW_Customers表中。
首先,我計算了所有客戶下的平均訂單數。 然后,我只想拉出已下訂單大於平均訂單數的客戶。
我的查詢:
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)
這是解析函數的經典。
select customerID
from (select customerID
,count(*) as customer_orders
,avg (count(*)) over () as avg_customer_orders
from NW_orders
group by customerID
)
where customer_orders > avg_customer_orders
;
select *
from NW_customers
where customerID in
(
select customerID
from (select customerID
,count(*) as customer_orders
,avg (count(*)) over () as avg_customer_orders
from NW_orders
group by customerID
)
where customer_orders > avg_customer_orders
)
;
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
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.