欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql之HAVING子句的用途(代码实例)

程序员文章站 2022-03-31 09:33:20
HAVING 子句可能是 SQL 诸多功能中最容易被轻视的一个。不知道它的真正价值是一个很大的损失。可以说,HAVING 子句是集中体现了 SQL 之面向集合理念的功能。多年以来,...

HAVING 子句可能是 SQL 诸多功能中最容易被轻视的一个。不知道它的真正价值是一个很大的损失。可以说,HAVING 子句是集中体现了 SQL 之面向集合理念的功能。多年以来,笔者一直认为掌握 SQL 的思维方式的最有效的捷径就是学习 HAVING 子句的用法。

这样说的原因是,与 WHERE 子句不同,HAVING 子句正是设置针对集合的条件的地方,因此为了灵活运用它,我们必须学会从集合的角度来理解数据。通过练习 HAVING 子句的用法,我们会在不经意间加深对面向集合这个本质的理解,真是一举两得。

在SELECT语句中使用HAVING子句来指定一组行或聚合的过滤条件。

HAVING子句通常与GROUP BY子句一起使用,以根据指定的条件过滤分组。如果省略GROUP BY子句,则HAVING子句的行为与WHERE子句类似。

请注意,HAVING子句将过滤条件应用于每组分行,而WHERE子句将过滤条件应用于每个单独的行。

未加having 子句之前:

SELECT substr(loan_time,1,10) as m1,sum(borrow_amount) as m2 from t_order_info WHERE model_id=13 and `status`=105

GROUP BY substr(loan_time,1,10)
m1  m2
2017-11-24  200000.000
2017-11-27  6200000.000
2017-11-28  8600000.000
2017-11-29  3600000.000
2017-11-30  4600000.000
2017-12-01  6000000.000
2017-12-04  3800000.000
2017-12-05  3400000.000
2017-12-06  5800000.000
2017-12-07  8000000.000

加入having 子句之后:

SELECT substr(loan_time,1,10) as m1,sum(borrow_amount) as m2 from t_order_info WHERE model_id=13 and `status`=105

GROUP BY substr(loan_time,1,10)

HAVING m2>5000000 and m2<6000000
m1  m2
2017-12-06  5800000.000