MySQL分组查询和聚合函数
mysql> select uid,count(uid) as nums,sum(amount) as totalamount,year from t_order where time > '2019-08-01' group by uid,year; 分组后的条件过滤:having 有时候我们需要再分组之后再对数据进行过滤,这时候就需要使用having关键字进行数据过滤,再上述条件下,我们需要取出消费次数超过一次的数据: mysql> select uid,count(uid) as nums,sum(amount) as totalamount,year from t_order where time > '2019-08-01' group by uid,year having nums>1; 这边需要注意区分where和having: where是在分组(聚合)前对记录进行筛选,而having是在分组结束后的结果里筛选,最后返回过滤后的结果。 可以把having理解为两级查询,即含having的查询操作先获得不含having子句时的sql查询结果表,然后在这个结果表上使用having条件筛选出符合的记录,最后返回这些记录,因此,having后是可以跟聚合函数的,并且这个聚集函数不必与select后面的聚集函数相同。 分组后的排序处理 order条件接在group by后面,也就是统计出每个用户的消费总额和消费次数后,对用户的消费总额进行降序排序的过程。 mysql> select uid,count(uid) as nums,sum(amount) as totalamount from t_order group by uid; (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |