2014-11-22 73 views
1

我有供應商 - 項目 - 部件數據庫。我爲查詢編寫了一個代碼:「獲取項目編號和該項目提供的部件的平均值」。
我已經完成了使用GROUP BY。我想知道如果沒有GROUP BY,我可以做到這一點。沒有組的彙總查詢


數據庫:

SUPPLIER(SNUMBER, SNAME, STATUS, CITY) 
PROJECT(JNUMBER, JNAME, CITY) 
PART(PNUMBER, PNAME, CITY, COLOR, WEIGHT) 
SPJ(SNUMBER, PNUMBER, JNUMBER, QUANTITY) 

編輯1:我編輯的查詢。查詢是:「把項目數和平均來件WEIGHT的該項目每個提供部分必須計算一次。」

+4

當你遇到像平均數,總數,數量或類似的任何聚合需求時,你需要做「GROUP BY」。其他選項通常很慢,複雜且不必要 – dotnetom 2014-11-22 18:56:26

回答

1

您可以使用相關子查詢來計算聚合值:

SELECT JNumber, 
     (SELECT SUM(Quantity * Weight)/SUM(Quantitiy) 
     FROM SPJ 
     JOIN Part USING (PNumber) 
     WHERE JNumber = Project.JNumber 
     ) AS AvgParts 
FROM Project 

這通常與使用GROUP BY的聯接一樣快,但稍微複雜一些。

+0

實際上,雖然我更喜歡明確的「group by」,但此方法可以(但不總是)比明確的「group by」快得多。 – 2014-11-22 20:43:05

+0

謝謝。這包含我正在尋找的想法。但是,我編輯了查詢。我恐怕起初我沒有提供正確的查詢形式。 – bsigal 2014-11-22 20:48:05