group by一般都是和聚合函数配合使用,当然,聚合函数可以不写省略。但是group by后边的字段,一定是查询字段之中除了聚合函数之外所有的字段。
SQL HAVING 出现的原因
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SQL HAVING 语法
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
人员信息表person:p
person_id | person_name |
1 | 展强 |
2 | 宋丽 |
订单-人员order_person:op
order_id | person_id |
1 | 1 |
2 | 1 |
3 | 2 |
订单表order:o
order_id | price |
1 | 100 |
2 | 200 |
3 | 300 |
查询每个人总的消费:
select p.person_id,sum(price) from p,op,o
where p.person.id=op.person.id and op.order.id = o.order_id
group by p.person_id
查询总的消费大于200的人员:
select p.person_id,sum(price) from p,op,o
where p.person.id=op.person.id and op.order.id = o.order_id
group by p.person_id
having sum(price)>200
where、group by、having的使用顺序
WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。
HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。