Group by的使用方法

  sql中如果要分组查询,一般都会使用到group by语句,如何熟练使用group by语句呢,我分以下几点进行总结。

  1. Group by与聚合函数
  2. Group by与Having
  3. 需要注意的地方

Group by与聚合函数

  group by一般与聚合函数一起使用。这是因为group by之后结果集就变成了多个分组,而每个分组可能包含多条记录,要想针对每个分组进行操作,所以必须使用可以作用在多条记录上的聚合函数。比如,下面的示例就使用了group by和聚合函数查询每个PNR的总记录数,sql语句如下。

1 -- 1,Group by与聚合函数
2 -- 查询每个PNR的总记录数
3 SELECT NewPNR,COUNT(*) FROM dbo.RemoteSession
4 GROUP BY NewPNR;

  如果要对分组进行筛选呢?要怎么实现,请继续往下看。

Group by与Having

  要对分组后的结果进行筛选,一般使用having语句来实现。请看下面示例,代码如下。

1 -- 2,Group by与Having
2 -- 查询总记录数>1(或者说有重复的)的PNR
3 SELECT NewPNR,COUNT(*) FROM dbo.RemoteSession
4 GROUP BY NewPNR
5 HAVING COUNT(*)>1;

需要注意的地方

  关于group by的使用,有几个特别需要关注的地方。

  1. select语句指定的字段要么包含在group by语句中作为分组的依据;要么就要被包含在聚合函数中(比如:count,sum等)。
  2. 注意where与having的区别,where是在分组前对结果集进行过滤,而having是对group by分组后的结果集进行过滤。

参考资料

  1. SQL中Group By的使用
  2. sql group by 与 having的用法
  3. 深入浅出SQL教程之Group by和Having
时间: 2024-10-17 05:40:23

Group by的使用方法的相关文章

[LeetCode] 在一堆字符串中找出包含相同字符的 group的较快方法,题 Anagrams

题目: Given an array of strings, return all groups of strings that are anagrams. Note: All inputs will be in lower-case. class Solution { public: vector<string> anagrams(vector<string> &strs) { } }; 题意本身并不是很清晰,开始我的代码总是报Output Limit Exceeded,

当Where遇到sum()和group by的解决方法

今天我们来说一下 在MYSQL中 当 where 遇到需要用 SUM()函数 做判断,并且需要分组的时候 应该怎么解决 我想大家都应该了解 where sum(score) group by name 这样是错误的 ,但是 怎么写是对的呢?下面我们就来看一下 id name type score 1 张三 语文 99 2 李四 语文 88 3 张三 数学 99 4 李四 数学 88 5 张三 化学 100 6 刘二 语文 100 根据上表 用 一句SQL语句 查出 总分大于150 的学生资料 并

Powershell Get Domain Group的几种方法

Group常见属性介绍: 一.Get-ADGroup获取群组(如下例循环获取群组的发送权限) #群组的发送权限info $groups=Get-ADGroup -filter * -SearchScope Subtree -SearchBase "OU=xx,OU=xx,DC=xx,DC=xx,DC=xx" #获取群组名称 $export[email protected]() foreach($group in $groups) { $groupname=$group.SamAccou

group by 的使用方法

数据库: 1.一个条件分组查询 $sql = "select brand,count(*),sum(price),avg(price),max(price),min(price) from goods group by brand"; $result = mysqli_query($link,$sql); if(mysqli_num_rows($result)>0) { while($row = mysqli_fetch_assoc($result)) { echo '品牌有'.

mysql “group by ”与&quot;order by&quot;的研究--分类中最新的内容

这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下明显.这不是我想要的数据,原因是msyql已经的执行顺序是 引用 写的顺序:select ... from... where.... group by... having... order by..执行顺序:

SQL删除重复数据方法

例如: id           name         value 1               a                 pp 2               a                 pp 3               b                 iii 4               b                 pp 5               b                 pp 6               c           

Linux中使用vsftpd搭建指定用户指定目录的ftp服务器的方法

一.检查Linux中vsftpd的安装情况. 二.将系统中的SELinux关闭,然后重新启动电脑 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启.如果不想重启系统,使用命令setenforce 0注:setenforce 1 设置SELinux 成为enforcing模式setenforce 0 设置SELinux 成为permissive模式在lilo或者grub的启动参数中增加:selinux=0

Fex4中使用Group滑动翻页

使用Group配合Animate实现分页,并且实现翻页的动画: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.c

linux 里 /etc/passwd 、/etc/shadow和/etc/group 文件内容解释

•/etc/passwd文件用于存放用户账户信息,每行代表一个账户,每个账户的各项信息用冒号分割,例如: root:x:0:0:root:/root:/bin/bash username:password:uid:gid:allname:homedir:shell 1.用户名. 2.密码,“x”代表密码存储在/etc/shadow中:当该值为其他任意非“x”值时,可以通过root用户切换(不需要密码),但是都无法通过非root用户切换到相应用户,因为无法获得起密码了. 3.uid,用户id,0-