2017-07-26 4 views
1

SQL-Abfragen mit GROUP BY, die keine HAVING-Klausel haben, können mit einer Unterabfrage neu geschrieben werden. Ein einfaches Beispiel kann der folgende:Umschreiben von SQL-Abfragen mit GROUP BY und ohne HAVING mit einer Unterabfrage

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 

Können Sie mir ein Beispiel geben, wenn es nicht getan werden kann? Ich meine, wenn eine GROUP BY SQL-Abfrage ohne HAVING kann nicht mit Unterabfrage hinter SELECT umgeschrieben werden?

+1

Klingt wie Hausaufgaben für mich. –

+5

Ich stimme zu, diese Frage als off-topic zu schließen, weil es einfach keine Programmierfrage ist. –

+0

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

Antwort

1

Ich denke, das wäre schwierig, wo Sie UND Werte gruppieren nach Werten in der gleichen Tabelle.

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

ok das liegt nicht an der Berechnung in 'group by', sondern aufgrund der Tatsache, dass die B-Tabelle Teil der' group by' -Klausel ist –

+0

guten Punkt, so dass es ziemlich trivial ist, Gegenbeispiele zu finden. Beantwortet das deine Frage? – JeffUK

+0

Ich denke, die Abfrage kann ohne 'GROUP BY' auch in einem solchen Fall neu geschrieben werden: select distinct A1.a_id, B1.a_id, ( \t select sum (B2.b_count) \t von A A2 \t links B B2 verbinden auf A2.a_id = B2.a_id \t wo A2.a_id = A1.a_id und B2.a_id = B1.a_id ) Bsum von A A1 B B1 links auf A1.a_id = B1.a_id –