1.Group by+having+sum(p+m+n)
sum:求和函数,实际应用中如果想要查询一个表中两个字段的和,应用时只要加上括号,里面将两个字段相加即可。
例如表repayment_tab(还款表)结构如下:
此时我们想要查询本金利息的总和,SQL语句如下:
select sum(a.balance+a.inte) from repayment_tab a;即:Mysql的函数中可以进行加、减、乘、除四则运算,且可以加括号,提高执行优先级;
例如如下写法:
select sum(a.payment_month_sum),sum(a.payment_sum),sum(a.loan_balance),sum(a.payment_month_sum+a.payment_sum-a.loan_balance) from repayment_tab_a a;
2.group by用法主要用于分组,要结合count(1)进行使用;
扩展:查询一个表的列数时,如果查询多个字段,一般采用count(1)而不使用count(*),原因在于count(1)的查询效率远远大于count(*);
将上述查询本金+利息之和的语句进行扩展,按照不同的期数进行分组;
此时SQL语句变为:
select sum(a.balance+a.inte),count(1) count_a from repayment_tab a group by a.term;
注意如下:
1)group by后面的分组条件可以是一个字段,也可以是多个关联在一起的字段;
2)count_a是count的别名,这个写法也可以写成:count(1) as count_a,其中我们的写法是神略as的;
3)因为聚合函数通过作用于一组数据而只返回一个单个值,因此,在SELECT语句中出现的元素要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,否则会出错。
3.having条件的使用:
1)只能作用于聚合函数
2)一般用于group by语句后进行书写作为分组的条件;例如扩展语句中想要查询出按照本金分组且大于2000的分组数据,SQL语句书写如下:
select sum(a.balance+a.inte).sum(a.balance) from repayment_tab a group by a.term having a.balance>2000;