# Frage zu folgender Query in EJB-QL



## Millman (10. Jul 2010)

Hey Leute,

ich möchte euch bitten mir bei folgender Query zu helfen:
Ich habe zwei Klassen, Schüler und Klasse. Zwischen diesen beiden Entitäten besteht eine bidirektionale ManyToMany Beziehung, die ich mittels JPA 2 erstellt habe.
Die Klassen sehen vereinfacht so aus:

```
Schüler:
Private int bewertung;
Private collection<Klasse> klassen;
```


```
Klasse:
Private long id;
Private collection<Schüler> schülers;
```
Ich möchte nun für eine vorgegebene Klasse(über deren id) die summe der bewertungen all ihrer Schüler bekommen.
Leider bin ich mir nicht sicher, wie ich eine solche Query mit der EJBQL erstelle, wenn eine ManyTOMany Beziehung vorliegt, speziell wie ich mir hierbei die Zwischentabelle Schülter_Klasse zu nutze mache.

Danke im voraus für eure Hilfe.


----------



## Gelöschtes Mitglied 5909 (10. Jul 2010)

```
select sum(k.schülers.bewertung) from Klasse k where k.id = :klassenId
```

so sollte das gehn. 

Btw: verwende bitte keine Umlaute, noch besser: Englisch


//EDIT:

sorry ich lag leider falsch: man kann so nicht navigieren

Richtig:


```
select sum(s.bewertung) from Schüler s join s.klassen c where c.id = :id
```

p.s.: wenn du den durchschnitt haben willst:


```
select avg(s.bewertung) from Schüler s join s.klassen c where c.id = :id
```

Im Anhang binary uns sourcen (im bin ist die pom.xml)


----------



## Millman (25. Jul 2010)

Danke erstmal für die Hilfe bei der letzten Query.

Ich hätte nun noch einmal eine Frage zu einer ähnlichen Query:

Diesmal möchte ich die Klassen sortiert haben, nach der Anzahl ihrer Schüler, d.h. die Klasse mit den meisten Schülern kommt als erstes, und die mit den wenigsten Schülern als letztes.

Folgendes habe ich mir überlegt, was leider nicht funktioniert:

""SELECT k FROM Klasse k JOIN k.schueler s Group By k Order By count(s.bewertung) desc"

Ob ich count(s) oder count(s.bewertung) nehme ist egal, ich bekomme immer einen Fehler.

Anfangs hatte ich es auch ohne Group By versucht, aber ich denke Group By brauche ich schon, damit das count richtig funktioniert.

Danke im voraus für die Hilfe!


----------



## Millman (26. Aug 2010)

Hallo zusammen,

ich wollte nochmal fragen, ob mir jemand mit der Query weiterhelfen könnte, komme da leider nicht voran.

Zur Query:
Ich habe mehrere Klassen mit je einer unterschiedlichen Anzahl an Schülern drin, und nun möchte ich durch meine Query eine Liste mit den Klassen bekommen, die nach der Anzahl ihrer Schüler absteigend sortiert sind.

Mein Vorschlag ist folgende Query:
"SELECT k FROM Klasse k JOIN k.schueler s Group By k Order By count(s.bewertung) desc"

Allerdings bekomme ich hier bereits einen Fehler, weil das count in der Order By-Klausel nicht verwendet werden kann. Ich nutze ja JPA 2.0 mit der DB(jdbc:derby) von meiner NetBeans 3.9 Version


----------



## Marcinek (2. Sep 2010)

Du kannst nicht machen

select * from table group by a

Dann kannst du nur das a selecten.

Außerdem ist k eine lokale domaine für eine Tabelle und afaik sollte da sowas stehen, wie k.* oder eine spalte. Und man kann nicht nach Tabellen groupen.

Wenn ich nach count sortieren will, dann mache ich immer

select count(*), ... from table order by 1

Gruß,

Marcin


----------

