很久沒有寫SQL了斩启,復(fù)習(xí)一下窄瘟,遇到了一個問題坦敌,用group by 每組只顯示一行
我這兒有三張表
user,里面有ID,name
produce,里面有ID,name
order,里面有ID,userid(外鍵酵镜,是userID),proid(外鍵,是produceID)
千萬不要把表名建成order殴穴,誰用誰知道~~~
我想用內(nèi)聯(lián)接查出 用戶名凉夯,訂單號,商品名推正。
那么SQL自然是:
select O.id ,U.id, U.name,P.name from user AS U
inner join orders as O on O.userid=U.Id
inner join produce as P on P.Id=O.proid ;
結(jié)果嗎~~
四個列分別是
訂單ID,用戶ID, 用戶名,商品名(字段名我起的太亂了恍涂。宝惰。植榕。。湊合看看吧~~~)
我想讓三個小劉的結(jié)果都放在一起尼夺。我不知道為什么就想到了group by尊残,以用戶ID分組,沒毛病~~
然后....加上group by U.id淤堵,鬼鬼寝衫,瞬間爆炸!9招啊慰毅!
就只有兩行了,但是我不慌扎阶,反手就是一個order by U.id(下表第二列)汹胃。
太久沒有寫sql婶芭,把group by的功能錯當(dāng)order by。 FUCK THAT
那么group好像就只能配合聚合函數(shù)(MIN,MAX,AVG,COUNT等)用來統(tǒng)計一個組的字段信息什么的了着饥,比如這樣
select U.id ,count(U.id) from user AS U
inner join orders as O on O.userid=U.Id
inner join produce as P on P.Id=O.proid
group by U.id ;
結(jié)果就為
似乎也許大概就只能統(tǒng)計了犀农?不能完整的顯示一個組嗎?只能交給where xx=xx了嗎宰掉。呵哨。。轨奄。
我的腦子里突然出現(xiàn)了having這個玩意孟害。會不有那種騷操作,用group by xxx 加上having 就可以選出一個組挪拟,然后把所有組的信息打出來纹坐,嚶嚶嚶,試試就試試舞丛。
然后我想了想耘子,試了試,不給力扒蚯小谷誓!行不通,不過呢吨凑,能用
group by xxx加上having 選出很多符合要求的組捍歪。
比如選出訂單數(shù)>0的用戶+用戶名。
select U.id ,U.name from user AS U
inner join orders as O on O.userid=U.Id
inner join produce as P on P.Id=O.proid
group by U.id having count(U.id)>0;
結(jié)果就為: