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

来源:互联网 发布:无心法师白琉璃知乎 编辑:程序博客网 时间:2024/06/05 19:27

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 usergroup by sex,age


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

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

select user.name,consume.money,consume.consume_timefrom userinner join (select consume.useid,max(money) money    from consume    group by consume.useid) ainner join consumeon user.useid=consume.useid and user.useid=a.useid and     consume.money=a.moneygroup by name;

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

select user.name, ccc.money,ccc.consume_timefrom user, (select c1.useid,c1.consume_time,c1.money,(select count(id)from consume c2where c1.useid=c2.useid and c1.money<=c2.money) cntfrom consume c1        )cccwhere user.useid=ccc.useidand ccc.cnt <=2;;


阅读全文
0 0
原创粉丝点击