2017-07-26 44 views
1

使用GROUP BY的沒有HAVING子句的SQL查詢可以使用子查詢重寫。一個簡單的例子可以是:用GROUP BY重寫SQL查詢而不用HAVING使用子查詢

select A.a_id, sum(B.b_count) Bsum 
from A 
left join B on A.a_id = B.a_id 
group by A.a_id 

select A.a_id, 
(
    select sum(b.b_count) Bsum 
    from B 
    where A.a_id = B.a_id 
) 
from A 

你可以給我一個例子,當它無法完成?我的意思是當GROUP BY沒有HAVING的SQL查詢不能用SELECT後面的子查詢重寫?

+1

聽起來像作業給我。 –

+5

我投票結束這個問題作爲題外話,因爲它根本不是一個編程問題。 –

+0

https://technet.microsoft.com/en-us/library/bb522495(v=sql.105).aspx – LONG

回答

1

我認爲這將是困難的,你想在同一個表中聚合和分組值。

select A.a_id, sum(B.b_count) Bsum 
from A 
left join B on A.a_id = B.a_id 
group by A.a_id, b.otherVal 
+0

好吧,這不是由於group by中的計算所致,但是由於B表是'group by'子句 –

+0

的一部分,所以找到反例非常簡單。這回答了你的問題了嗎? – JeffUK

+0

我想查詢可以在不'GROUP BY'即使在這種情況下,改寫爲:從A A2 \t選擇不同A1.a_id,B1.a_id, ( \t SELECT SUM(B2.b_count) \t左加入乙B2上A2.a_id = B2.a_id \t其中A2.a_id = A1.a_id和B2.a_id = B1.a_id )Bsum 從A A1 留在A1.a_id = B1.a_id –