2014-05-20 79 views
0

我目前正在爲我的數據庫類使用SQL中的Northwind數據庫開展實驗。我似乎無法弄清的幾個問題是:SQL,基本查詢

列出所有產品的名稱,其中單價大於 的平均單價。

我相信它會看起來像

Select Product Name From Products Where UnitPrice > AVG(UnitPrice) 

它似乎並不雖然接受這一點。

此外,另一個問題是

清單與單價最低

我認爲該產品的名稱將是

Select ProductName From Product Where MIN(UnitPrice) 

這些都不是工作,我感到非常沮喪,請幫忙!

+0

'產品Name'或'Product_Name'或'ProductName'? –

+0

WHERE條件總是比較兩個值 – Serpiton

回答

2

您不能將組函數放入WHERE子句中。可以這樣想:WHERE子句中的表達式必須只引用表的一行(或多個表中的行的連接)。但是表達式不能考慮一組行。

相反,你可以使用子查詢來獲得平均價格:

Select p.ProductName 
From Products As p 
Cross Join (Select AVG(UnitPrice) AS avg_unit_price From Products) As a 
Where p.UnitPrice > a.avg_unit_price 
+0

由於沒有連接條件,這會產生語法錯誤。推測你的意思是一個CROSS JOIN。 –

+0

@KyleHale,是的,謝謝你的收穫。我很習慣使用MySQL,並且允許在MySQL中省略連接條件。問題只用'sql'標記,所以我不應該假設哪個RDBMS品牌或版本。 –

+0

對我來說,提示是羅斯文數據庫的參考,這是一個微軟的東西。 :) –

0
Select a.[Product Name] 
From Products a, (select AVG(UnitPrice) as AvgUnitPrice from Products) b 
Where a.UnitPrice > b.AvgUnitPrice 

Select a.[Product Name] 
From Products a 
Where a.UnitPrice > (select AVG(UnitPrice) as AvgUnitPrice from Products) 
0
Declare @Avg Decimal 
Select @Avg = Sum(UnitPrice)/Count(UnitPrice) 
     From Products 

Select A.ProductName 
     From Products 
     Where UnitPrice > @Avg 
+0

請解釋*您的代碼如何解決OP的困境。 –

1

名單,其中單價更高的所有產品的名稱比平均單價高:

 

Select p.ProductName 
     From Products p 
     Where p.UnitPrice > (Select AVG(UnitPrice) From Products) 

清單與單價最低的產品的名稱: (返回其所有產品至少單價)

 

Select p.ProductName 
     From Products p 
     Where p.UnitPrice = (Select MIN(UnitPrice) From Products)