2016-09-07 56 views
0

加入我需要加入一個表與另一種,其中對於在左表中的每個類型的基團i的第二個表,獲得了此類型的值的總和,其中group_type = 4 我嘗試以下:SQL留下SUM

SELECT * 
FROM orbiting_group_types ogt 
LEFT JOIN 
(SELECT SUM(val) 
FROM report_orbiting_vals rov 
ORDER by TYPE 
WHERE rov.orbiting_group_type_id = 4) 
ON ogt.id = rov.orbiting_group_type_id 

但是它扔我一個錯誤 -

syntax error at or near "WHERE" 
LINE 8: WHERE rov.orbiting_group_type_id = 4) 

我錯過了什麼?

+3

'ORDER by'應該在'WHERE'子句之後。 – redneb

回答

2

試試這個:

SELECT * 
FROM orbiting_group_types ogt 
LEFT JOIN 
(SELECT SUM(val) 
FROM report_orbiting_vals subrov 
WHERE subrov.orbiting_group_type_id = 4 
//ORDER by TYPE 
) rov 
ON ogt.id = rov.orbiting_group_type_id 

1)您應該爲您的子查詢中引用它們。你不能從子查詢的外部引用內部。

2)TYPE聽起來不像列名

3)ORDER BY後去哪裏,總是如此。

+1

它實際上應該是SELECT * FROM OGT orbiting_group_types LEFT JOIN (SELECT SUM(VAL),orbiting_group_type_id FROM report_orbiting_vals subrov WHERE subrov.orbiting_group_type_id = 4 GROUP由orbiting_group_type_id) rov ON ogt.id = rov.orbiting_group_type_id –

0

一般來說order by子句必須在where子句後出現。另外,order by在子查詢中沒有意義 - 我懷疑你的意思是group by在這種情況下。

+0

這隻能處理問題中3個錯誤中的1個。 – ebyrob

3

您沒有爲您的子查詢別名,並且您的子查詢未選擇您在主查詢中加入的字段。正如其他提到的子查詢中的order by將無法​​正常工作。

我懷疑你要找的線沿線的結果:

SELECT * 
FROM orbiting_group_types ogt 
LEFT JOIN 
(SELECT SUM(val), orbiting_group_type_id 
FROM report_orbiting_vals rov 
WHERE rov.orbiting_group_type_id = 4 
group by orbiting_group_type_id) as rov 
ON ogt.id = rov.orbiting_group_type_id 

通知as rovgroup by,在選擇你的子查詢的第二列和去除的order by

+0

謝謝,但不是它告訴我 - 錯誤:語法錯誤在或在「WHERE」附近 行7:WHERE rov.orbiting_group_type_id = 4)作爲rov ^ –

+0

@EvgeniyKleban你是對的,'WHERE'應該在前面「GROUP BY」,相應地改變它。無法測試'SQL',因爲我沒有相應的表定義。希望這個版本能爲你工作。 – Aquillo

+0

是它的工作,非常感謝你:) –