您的位置:首页 > 其它

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

2017-08-11 12:53 260 查看

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;
;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: