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
希望与广大网友互动??
点此进行留言吧!