SQL多表关联求和问题
在很多时候我都要时进行多表的关联查寻,而多表关联的求和是常常用到的,但是也是有一点难度,今天
我把我几个案例展现出来,与大家一同分享,若有什么不对,请大家多多指出来,我一定马上更改。
第一个问题(图在最后面)
1). 某内容管理系统中,表message有如下字段
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
2).同样上述内容管理系统:表comment记录用户回复内容,字段如下
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面(由于数据表的问题,实现这个我是在数组中实现的)
文章id 文章标题 点击量 回复数量
实现SQL语句为:
$sql="select message.id as newsid,message.title as newstitle,message.hits as newshits,count(comment.id) as commentnums from message left join comment on message.id=comment.id GROUP BY comment.id";
这里一定要注意:1 求和时:count(comment.id),应是count,而不是SUM
2 记住最后group by 这个条件,是不可少的。
第二个问题(关于营业额 图在最后面)
1). 系统中,有表店名表test3有如下字段
store_name 店名
sales 营业额
2).同样上述系统中:有表地区stations表字段如下
stations 地区
stroe_name 店名
现要求算出每个地区的一年总营业额来
实现SQL语句为:
$sql2="select stations.stations as '地区',sum(test3.sales) as '全年营业额' from stations left join test3 on stations.stroe_name=test3.store_name group by stations";
第三个问题(什么时候用HAVING,,,,什么时候用WHERE)
使用HAVING 的指令对SQL函数产生的值来设定条件(注意是不能使用where关键字,会报错)
当我们需要对SQL函数产生的结果进行条件选对时(不能使用WHERE),要用到它,HAVING 子句通常是在一个 SQL 句子的最后。一个含有 HAVING 子句的 SQL 并不一定要包含 GROUP BY 子句
总结:1 从上我们可以看出来:函数count()是对字段值出现的次数求和
而函数SUM()是对字段本身的值进行求和的
2 对于GROUP BY 分组求和时,一定要清楚我们对那个字段进行求和,分组的依据是什么。这些一定要想清楚。
另外一般,GROUP BY都会出现在分组求和。
附图:
第一个问题的两个表(文章表):
第二个问题的两个表
