mysql 5.7關於group by顯示多列的一個潛坑


最近在看sql的相關知識,看完了michael-chen的關於mysql的詳細介紹並做了一些練習題后,茅塞頓開,以前上學惶恐的什么內連接,左連接,右連接完全都不在話下,底氣倍增。然而,后續一個看起來非常普通的多表查詢,就讓我整個大腦發熱,瀕臨down機,回顧這個問題,主要還是固化思維惹的禍,解決問題方向沒抓對並且沒有及時調節方向。so, 重點,敲黑板,遇到錯誤初步分析沒有結果后,請立刻,馬上原貼轉向互聯網!!!

 

問題描述:有兩張表,dept和employee,他們通過外鍵dept_id關聯起來。題目要求前台頁面查看每個部門有多少人,並展示 部門ID,部門名稱,及部門人數這三個字段

 

看到這個題的時候,第一反應多表查詢內連接並分組,沒毛病,但是怎么又用group by又顯示多列呢。我看到的例子都是只顯示一個字段就是分組字段的啊,因為要分組統計。嗯 腦殼熱。。。不管三七二十一,寫個sql跑一下看看,果然出錯。

語句:select dept.dept_no, dept.dept_name, count(staff_no) as number from dept inner join staff where dept.dept_no = staff.dept_no group by dept.dept_no;

報錯:ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'ashtest.dept.dept_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

 

看吧,這提示明里暗里就是在說group by不能顯示多列嘛

好了,是不是group by有其他我不知道的用法,百度下group by怎么顯示多列,如下圖,發現問問題的人還不少

 

 

打開一兩個看看,媽呀,嚇死,都在鄙視題主。好尷尬。。。

 

 

走到這里,有點小絕望,又打開michael老師的博客園讀了一遍,凄涼了,顯示多列除了聚合函數,加分組的列,並沒有多余的列啊,一定是我不夠專業,我陷在深深的自我懷疑中,腦袋發熱,跟cpu一樣嗡嗡嗡,好像下一秒就會crash一樣。

想找個DB專家問下,掃視一遍,咩有,翻翻通訊錄,沒有。呃,我好難過。。

把這個問題給我同事看,她寫了跟我一樣的語句,並且告訴我,跑過了,跑過了!瓦特?!我跟她說,不行,會出錯,她說不可能,她都跑過了,呃。。忽然間,忽然間,什么東西好像冒出來。。我們用的是一樣的mysql么??

終於在這個時候,我把報的錯往百度上一貼,媽呀,果然,mysql 5.7升級后的問題,然而,本人我用的就是5.7。具體的解決辦法已經不重要了,百度一搜一大把,一開始方向就走錯了,花了再多的時間也不濟於事,謹以此文紀念那顆曾經發熱到要crash的大腦。

 

解決辦法請參考: http://www.520sz.com/mysql-5-7-10-group-by-error.html

對了,跑完SET sql_mode = '';后,給點時間server生效,馬上去跑也還會報錯,大概3分鍾后,上面的查詢語句就可以跑通了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM