2015-03-19 82 views
0

我有一個表,看起來像這樣:選擇所有行,所有行的平均價格,其中客戶id = X

[invoice_lines]

ID(INT),客戶ID(INT) ,價格(int),產品名稱(文本)

我想查詢此表,並提取所有行。但我也想用customerid = customerid提取所有行的平均價格。

因此,可以說我有了這些值一行:

ID(1),客戶ID(134),價格(125),產品名稱(互聯網)

我想提取行,但我也想要一個列,其中包含所有行的客戶均價134。

任何指針? :)

+0

一些樣本數據最終希望的結果,請! – jarlh 2015-03-19 08:00:36

回答

1
DECLARE @id INT 
SET  @id = 1 

SELECT id, 
      customerid, 
      price, 
      productname, 
      (
       SELECT AVG(price) 
       FROM  invoice_lines i 
       WHERE i.customerid = o.customerid 
     )AS avgprice 
FROM invoice_lines o 
WHERE o.id = @id 

Fiddle Demo

2
SELECT id, customerid, price, productname, 
    AVG(price) OVER (PARTITION BY customerid) AS avg_price 
from invoice_lines 
+0

我想你需要一個cte的幫助才能正確使用它。我在我的答案中有一個演示,對此進行測試。如果你過濾了id,那麼結果是錯誤的。 – 2015-03-19 08:11:47

+0

我想你應該寫'AVG(價格* 1.00)',否則結果將舍入爲整數 – 2015-03-19 08:12:38