首页 > 数据库技术 > 详细

SQL Count(*)函数,GROUP_By,Having的联合使用

时间:2020-04-21 16:16:36      阅读:64      评论:0      收藏:0      [点我收藏+]

COUNT(*)  函数返回在给定的选择中被选的行数。

语法:SELECT  COUNT(*) FROM  table

使用:现在有一个表,名叫app_category,从Navicat中可以看到表中所有数据,如图所示,可见表中有297条数据

技术分享图片

使用count函数的时候可以看到:

技术分享图片

当然仅仅是这个样子,是木有意义的,我用个可视化工具一眼看穿,要这个函数就显得鸡肋了,那么我们继续往下看。

场景是这样的:表app_category与表category关联。且表间关系是一对多,即同一个app_category_id 对应多个category-id,现在我需要统计出每一个category_id在app_category表中出现的次数那么该如何实现呢,请看接下来的操作:

技术分享图片

这样依然有点不够酷炫,那么我们还可以在后面继续追加sql语句呀

例如这条语句:

SELECT category_id ,COUNT(*) AS count FROM app_category
GROUP BY category_id HAVING count(category_id) >2

其查询的结果是只有count的值大于2 的时候,才是需要的结果

技术分享图片

是不是有点小先进了,当然不要激动,我们还可以把这个查询的结果作为子查询,进行嵌套查询,两个表关联查询然后再嵌套查询等等。这里我就不过多截图,上一个开发商城项目中用到的查询语句:

 

SELECT ps.name FROM property_set ps , category_property_set cps WHERE ps.id=cps.property_set_id AND category_id=(
SELECT category_id AS count FROM category_property_set
GROUP BY category_id HAVING count(category_id) <5
)

大眼一看,可能比较懵逼,听我分析一下:

首先是子查询:SELECT category_id AS count FROM category_property_set 
GROUP BY category_id HAVING count(category_id) <5

查出category_property_set 表中category_id出现次数小于5的那个category_id的具体的值,刚好得到的结果是只有一条,那么满足嵌套查询的条件,用到<,>=等符号时,子查询结果必须唯一,所有给其添加到外部查询,其实等价于这样一条语句:

SELECT ps.name FROM property_set  ps , category_property_set  cps WHERE ps.id=cps.property_set_id  AND category_id=925640926728343552

不用怀疑,这个category_id就是查询出来的ID,然后这又是一个最最基本的两表联合查询,连个外联内联都没用,然后结果就是这个样子

技术分享图片

刚好就是需要的一个名称,为啥这麻烦呢,因为表建的不好呗,需要通过category_id 查category_property_set表,然后再通过结果去查property_set表,最后得到属性的名字,然后就只能想办法在sql语句上下功夫了呀。

原文:https://www.cnblogs.com/gongchengshiwhl/p/7994761.html

SQL Count(*)函数,GROUP_By,Having的联合使用

原文:https://www.cnblogs.com/T8888/p/12744875.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!