group by和 选择前几个的select语句

group by

    1.后面添加的若干属性,共同组成了一个分组的依据,

    2.count(*),或者max(age)这类函数,都将计算分组内的数据

   3.where字句和having子句 

           where将对分组前的所有数据进行筛选。如果想要记录50岁的女的数量,应该在where中加条件,而不是having中。

           having将对分组后的一组数据搞事情,而且group by age后,一组50岁的数据只显示一条,也就是一群50岁的人,有男有女,但是最后只显示一种sex(假设显示了女),这时候如果having后面是对这色系别进行过滤,having sex=male的话,将过滤掉50岁的所有记录。带来错误。

     4.也就是说group by后面的其它属性可能不是你想要的。比如说group by时候select max(age),sex。这时候sex得到的值,可能并不是年龄最大的选手的性别。

select *,count(*)
from user
group by sex,age


查找每个人消费最高的一天的花费和日期选出每个user消费最多的金额

表结构: user(userid, name, age) ,consume(id, userid, money, timer)

select user.name,consume.money,consume.consume_time
from user
inner join (
	select consume.useid,max(money) money
    from consume
    group by consume.useid
) a
inner join consume
on user.useid=consume.useid and 
	user.useid=a.useid and 
    consume.money=a.money
group by name;

每个用户消费最多的两天给每张消费表,另外添加一个消费金额排名,最后排名过滤

select user.name, ccc.money,ccc.consume_time
from user
, (select c1.useid,c1.consume_time,c1.money,
				(select count(id)
				from consume c2
				where c1.useid=c2.useid
					 and c1.money<=c2.money
				) cnt
			from consume c1
        )ccc
where user.useid=ccc.useid
and ccc.cnt <=2;
;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值