2017-03-16 77 views
-1
組結果

我的SQL請求給我:MySQL的:從請求

 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

我想申請另一個SQL這個結果所以最後的結果是使得在「nonlus」

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

我試圖

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 

但得到錯誤

每個派生的表必須有它自己的別名

+0

真的只是鍵入字母在您的第一個「GROUP BY」之後的''後面加上'a'。 – Siyual

+0

關於這個問題有數百個問題。您是否嘗試將錯誤消息放入SO的搜索框? – Barmar

+0

你應該學會使用明確的'JOIN'而不是交叉產品。 – Barmar

回答

1

你只需要一個別名分配給內部select,請嘗試以下操作:

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

當您按ID進行分組時,任何列(如果不是select中的group by列都需要進行聚合)。 – PeterHe

+0

@PeterHe MySQL對此很寬容。對於由分組列唯一定義的列,這不是必需的。 – Barmar

+0

它依賴於sql_mode,並且可以得到意想不到的結果。標準的SQL不允許這樣做。 – PeterHe