2017-08-02 66 views
1

我試圖根據列的平均值過濾表格,但不知何故它不起作用。它不會返回任何東西。平均值大約爲102,用它替代AVG子句會返回正確的行。基於整列的平均值過濾表格

我怎樣才能讓它正常工作?

SELECT 
ce.customer_id, 
ce.first_name, 
ce.total 

FROM 
(SELECT 
p.customer_id, 
c.first_name, 
SUM(p.amount) AS total 

FROM payment as p 
JOIN customer as c ON p.customer_id=c.customer_id 
GROUP BY p.customer_id,c.first_name) AS ce 

GROUP BY ce.customer_id,ce.first_name,ce.total 

HAVING ce.total > AVG(ce.total) 
+1

基於查詢,'ce.total','AVG(ce.total)'都會有相同的value.so你不要獲得任何行。向我們展示一些示例數據並解釋您正在嘗試做什麼。 –

+0

您想要每個客戶的總和大於所有客戶的平均總和的值嗎? –

+0

是的@RossBush,這正是我的意圖。 – NWorrell

回答

0

您的查詢有多個錯誤。外部GROUP BY沒有意義。

我的建議是使用窗口函數。在這種情況下,你想要的總的平均水平,所以這看起來像:

SELECT ce.customer_id, ce.first_name, ce.total 
FROM (SELECT p.customer_id, c.first_name, SUM(p.amount) AS total, 
      AVG(SUM(p.amount)) OVER() as avg_total 
     FROM payment p JOIN 
      customer c 
      ON p.customer_id = c.customer_id 
     GROUP BY p.customer_id, c.first_name 
    ) ce 
WHERE ce.total > avg_total 
+0

謝謝!這很棒。我也沒有使用OVER()語句。我很驚訝地看到這可以讓聚合器嵌套,因爲我之前無法嵌套聚合器。 – NWorrell