关于Group只显示一行的问题

1,217 阅读2分钟

很久没有写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, 用户名,商品名(字段名我起的太乱了。。。。凑合看看吧~~~) sql结果

我想让三个小刘的结果都放在一起。我不知道为什么就想到了group by,以用户ID分组,没毛病~~ 然后....加上group by U.id,鬼鬼,瞬间爆炸!!! 瞬间爆炸 就只有两行了,但是我不慌,反手就是一个order by U.id(下表第二列)。 结果

太久没有写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;  

结果就为: 结果