2017-03-16 2 views
-1

My SQL-Anfrage gibt mir:mysql: Gruppe ergibt sich aus Anfragen

 SELECT 
     sf_guard_user.id, sf_guard_user.username, sf_guard_user.avatar_time, fromid, toid,sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus 
     FROM chatMessage, sf_guard_user 
     WHERE (chatMessage.fromid = sf_guard_user.id AND toid=16595 AND toidhidden=0) OR (chatMessage.toid = sf_guard_user.id AND fromid=16595 AND fromidhidden=0) 
     GROUP by fromid 

enter image description here

ich einen anderen SQL zu diesem Ergebnis so Endergebnis ist anwenden möchten macht die Summe auf 'nonlus'

SELECT id, username, avatar_time, fromid, toid, sum(nonlus) FROM 
**this request** 
order by id 

ich versuchte

SELECT id, username, avatar_time, fromid, toid, sum(nonlus) FROM (
      SELECT 
      sf_guard_user.id, sf_guard_user.username, sf_guard_user.avatar_time, fromid, toid,sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus 
      FROM chatMessage, sf_guard_user 
      WHERE (chatMessage.fromid = sf_guard_user.id AND toid=16595 AND toidhidden=0) OR (chatMessage.toid = sf_guard_user.id AND fromid=16595 AND fromidhidden=0) 
      GROUP by fromid) 
Group by id 

Aber Fehler

Jede abgeleitete Tabelle muss seinen eigenen alias

+0

wahrsten Sinne des Wortes geben Sie einfach den Buchstaben 'a' nach deinem') 'nach deinem ersten' GROUP BY'. – Siyual

+0

Es gibt Hunderte von Fragen dazu. Haben Sie versucht, die Fehlermeldung einfach in das Suchfeld von SO zu schreiben? – Barmar

+0

Sie sollten lernen, explizite 'JOIN' anstelle von Kreuzprodukten zu verwenden. – Barmar

Antwort

1

Sie müssen nur einen Alias ​​inneren select zuweisen, versuchen Sie haben die folgende erhalten:

SELECT id, username, avatar_time, fromid, toid, sum(nonlus) FROM (
      SELECT 
      sf_guard_user.id as id, sf_guard_user.username as username, sf_guard_user.avatar_time as avatar_time, fromid, toid, sum(chatMessage.fromidlu) - sum(chatMessage.toidlu) as nonlus 
      FROM chatMessage, sf_guard_user 
      WHERE (chatMessage.fromid = sf_guard_user.id AND toid=16595 AND toidhidden=0) OR (chatMessage.toid = sf_guard_user.id AND fromid=16595 AND fromidhidden=0) 
      GROUP by fromid) a 
Group by a.id 
+0

Wenn Sie nach ID gruppieren, müssen alle Spalten, wenn keine Gruppe nach Spalte in der Auswahl, Aggregation haben. – PeterHe

+0

@PeterHe MySQL erlaubt dies. Und es ist nicht erforderlich für Spalten, die durch die gruppierten Spalten eindeutig definiert sind. – Barmar

+0

Es hängt von sql_mode ab und kann zu unerwarteten Ergebnissen führen. Standard sql erlaubt dies nicht. – PeterHe

Verwandte Themen