关于Group只显示一行的问题

很久没有写SQL了,复习一下,遇到了一个问题,用group by 每组只显示一行

我这儿有三张表
user,里面有ID,name
produce,里面有ID,name
order,里面有ID,userid(外键,是userID),proid(外键,是produceID)

千万不要把表名建成order,谁用谁知道~~~

我想用内联接查出 用户名,订单号,商品名。
那么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 ;

结果吗~~
四个列分别是
订单ID,用户ID, 用户名,商品名(字段名我起的太乱了。。。。凑合看看吧~~~)


关于Group只显示一行的问题_第1张图片
sql结果

我想让三个小刘的结果都放在一起。我不知道为什么就想到了group by,以用户ID分组,没毛病~~
然后....加上group by U.id,鬼鬼,瞬间爆炸!!!


瞬间爆炸

就只有两行了,但是我不慌,反手就是一个order by U.id(下表第二列)。


关于Group只显示一行的问题_第2张图片
结果

太久没有写sql,把group by的功能错当order by。 FUCK THAT
那么group好像就只能配合聚合函数(MIN,MAX,AVG,COUNT等)用来统计一个组的字段信息什么的了,比如这样

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       ;

结果就为


结果

似乎也许大概就只能统计了?不能完整的显示一个组吗?只能交给where xx=xx了吗。。。。
我的脑子里突然出现了having这个玩意。会不有那种骚操作,用group by xxx 加上having 就可以选出一个组,然后把所有组的信息打出来,嘤嘤嘤,试试就试试。
然后我想了想,试了试,不给力啊!行不通,不过呢,能用
group by xxx加上having 选出很多符合要求的组。
比如选出订单数>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;  

结果就为:


结果

你可能感兴趣的:(关于Group只显示一行的问题)