博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer查询之group by
阅读量:5010 次
发布时间:2019-06-12

本文共 1151 字,大约阅读时间需要 3 分钟。

通常我们在对某表进行查询的时候,会发现有很多重复的数据,比如有张登录统计表,我们现在需要查出登录一次,登录二次,登录三次..的用户。如果根据用户的ID来统计的话,那样肯定是不行的,我们要统计的是一次的用户数量,而不是某个用户的登录次数.碰到这个问题的时候我们就可以用到group by了。入下:

 

select
UserID,
COUNT
(UserID) total
from
Tb
group
by
UserID

 

      这样就可以实现根据UserID来分组了,查询结果有两列,第一列是Userid,第二列是该UserID出现的次数,这个次数也就是我们需要的登录次数了。这里要啰嗦下的是,查询的字段必须是在聚合函数group by中出现过的字段,不然会报错的。这样查出来的结果中,次数的统计排序是乱的,如果想要统计的结果按从少到多排序的话,可以这样:

 

select
COUNT
(UserID) total,UserID
from
Tb
group
by
UserID
order
by
total
asc

 

      如果我们想在查询出的结果中只取登录一次的用户ID的话,那么我们需要这样做:

 

select
COUNT
(UserID) total,UserID
from
Tb
group
by
UserID
having
COUNT
(UserID)
=
1
order
by
total
asc

 

  大家看到了这里加了个having,这个是在聚集函数的结果集中取符合条件的,注意,这个地方如果写成 having total=1会提示列名“total“无效。其实有些时候这样写还是没完,因为这样查出来的还是张二维表,如果我们需要统计登录一次的用户的总数,那么这个时候该怎么做呢?其实用上面的语句也能实现,只不过在程序中统计下这表的行数就够,但是那样是不合理的,那样的结果会导致不必要的数据在传输,其实我们要的是个整数,传出的只要个整数就够了,没必要来张表的传输。如果要传输这个整数,该怎么写呢?如下:

 

select
COUNT
(ID)
from
(
select
ID
from
Tb
group
by
ID
having
COUNT
(ID)
=
1
)
as
t

 

  这样就可以统计出行数了。注意的是这里的子查询必须是存在的列,如果用Count(ID)的话会报错。

  好了SqlServer的group by 想写的已经都写完了,在最后声明下,本人不是高手,所写的都是本人的一些平时开发过程中的经验,在这总结下,不保证说的都对的,如果有错的地方望海涵,也希望能及时指正。

转载于:https://www.cnblogs.com/abenmao/archive/2012/02/28/2371373.html

你可能感兴趣的文章
笔记1126ASP.NET面试题(转)
查看>>
考研路茫茫--单词情结 - HDU 2243(AC自动机+矩阵乘法)
查看>>
HTTP运行期与页面执行模型
查看>>
tableView优化方案
查看>>
近期思考(2019.07.20)
查看>>
Apache2.4使用require指令进行访问控制
查看>>
冗余关系_并查集
查看>>
做最好的自己(Be Your Personal Best)
查看>>
如何搭建github+hexo博客-转
查看>>
HW2.2
查看>>
将Windows Server 2016 打造成工作站(20161030更新)
查看>>
5大主浏览器css3和html5兼容性大比拼
查看>>
hdu-5894 hannnnah_j’s Biological Test(组合数学)
查看>>
scss常规用法
查看>>
css定位position属性深究
查看>>
android中不同版本兼容包的区别
查看>>
Static 与 new 的问题【待解决】
查看>>
xml
查看>>
在 mvc4 WebApi 中 json 的 跨域访问
查看>>
敏捷开发文章读后感
查看>>