2016-11-29 47 views
1

我在撰寫SQL查詢SQL查詢的幫助,現在數據顯示在1列

Sculptor (SRID, SR_FName, SR_LName, SR_DOB) 
Sculpture (SEID, SE_Name, SE_Value, SRID*, SID*) 
Model (MID, M_FName, M_LName, M_Salary) 

列表雕塑家的姓氏和總雕塑價值面臨的一個問題(如一個名爲場「總 雕塑價值「)雕塑家雕刻的所有雕塑(四捨五入到小數點後兩位),按總價值升序排列。只列出雕塑總值小於10萬的雕塑家。

我的查詢是:

SELECT SR_LName, 
     SE_Value AS TotalSculptureValue 
FROM Sculptor 
     JOIN Sculpture USING (SRID) 
HAVING (SE_Value) < 100000 
+0

你的總價值名字都雕塑家需要使用聚合:'SUM(value)'...'GROUP BY name'。我在評論中迴應,而不是給你完整的答案,因爲學習使用聚合函數是至關重要的。 –

+0

是指?爲什麼我使用SUM?你能解釋一下嗎? –

回答

0

你需要學會使用聚合函數,但這裏的這一個將如何工作:

SELECT SR_LName, 
     sum(SE_Value) AS "TotalSculptureValue" 
FROM Sculptor 
     JOIN Sculpture USING (SRID) 
group by SR_LName 

先嚐試運行的查詢。你應該看到所有雕塑家的名字和他們的價值總和。

然後添加HAVING回來,因爲這是你如何限制的聚集函數的計算結果:

SELECT SR_LName, 
     sum(SE_Value) AS "TotalSculptureValue" 
FROM Sculptor 
     JOIN Sculpture USING (SRID) 
group by SR_LName 
having sum(SE_Value) < 100000 

HAVINGWHERE不同。如果你想限制非聚合列,如姓名,你可以使用WHERE

SELECT SR_LName, 
     sum(SE_Value) AS "TotalSculptureValue" 
FROM Sculptor 
     JOIN Sculpture USING (SRID) 
where SR_LName like '%Ali%' 
group by SR_LName 
having sum(SE_Value) < 100000 

這將使你與包含阿里和小於100000