DB2 sql语句学习记录

以下均为个人理解

DB2的语法:

1、查询重复字段,查询表中某个字段的数量大于二。group by 表示分组,以一个或者多个字段分组。

SELECT NUM FROM COHOTABLE GROUP BY  NUM HAVING COUNT(NUM) > 2

SELECT NUM,COUNT(*) FROM COHOTABLE GROUP BY  NUM HAVING COUNT(NUM) > 2

备注:经测试,貌似在DB2中,select之后不能含有 group by后没有显示的字段。也就是查询的的字段,必须来自于分组字段。不然会报错: DB2 SQL Error: SQLCODE=-119, SQLSTATE=42803。这点和mysql有点差别。

-- 错误
SELECT NUM,AGE FROM COHOTABLE GROUP BY  NUM HAVING COUNT(NUM) > 2

-- 正确
SELECT NUM,AGE FROM COHOTABLE GROUP BY  NUM,AGE  HAVING COUNT(NUM) > 2
-- 正确
SELECT STU_NAME FROM  COHO GROUP BY STU_SUB,SCORE

拓展(以mysql为例):GROUP BY 又叫分组聚合,其语句用于结合(非必须)聚合函数,根据一个或多个列对结果集进行分组

常见的聚合函数:count() 计数,sum() 求和,avg() 平均数,max() 最大数,min() 最小数。

-- 以名字进行分组。然后对每组内的数据按照score字段计数,也就是每组内,
-- 数据条数大于等于二的返回。默认返回第一条数据。以下同理
select * from coho group by stu_name having count(score) >=2

SELECT NUM FROM COHOTABLE GROUP BY  NUM HAVING SUM(NUM) > 10

SELECT NUM FROM COHOTABLE GROUP BY  NUM HAVING AVG(NUM) > 2

select * from coho group by stu_name,stu_sub having max(score) >=98 

SELECT NUM FROM COHOTABLE GROUP BY  NUM HAVING MIN(NUM) > 1

 

GROUP BY 分组查询的实现逻辑(以mysql为例):

在查询的时候,sql会根据group by 之后的一个或者多个字段分组,字段值相同的为一组。以下面这张图为例

当使用:select *  from  coho group by stu_no以stu_no 为聚合字段查询时,表中数据会按照stu_no进行分组。stu_no相同的为一组。

0010239    张家栋    男    语文    100,0010239    张家栋    男    英文    99】,

0010240    李良玉    男    语文    78】

0010248    温小雅    女    数学    98,0010248    温小雅    女    英文    100】,

0010245    王霄    男    英文    99,0010245    王霄    男    数学    100】,

0010247    李玲玉    女    语文    98,0010247    李玲玉    女    数学    98,0010247    李玲玉    女    英文    98】

同理,当使用多个字段分组时,就以多个字段为整体进行分组。select * from coho group by stu_sub,score

   stu_no  stu_name  sex  stu_sub  sorce

【0010245    王霄    男    数学    100】,

【0010248    温小雅    女    数学    98,0010247    李玲玉    女    数学    98】,

【0010248    温小雅    女    英文    100】,

【0010247    李玲玉    女    英文    98】,

【0010239    张家栋    男    英文    99,0010245    王霄    男    英文    99】,

【0010239    张家栋    男    语文    100】,

【0010240    李良玉    男    语文    78】,

【0010247    李玲玉    女    语文    98】

而且显示结果只会显示每个组中的第一条数据。所以只使用group by,不加聚合函数的使用意思不大。

 

我们最常见的查询方式都是:group by + having

having的作用,字面上和where一样,而且having只能和group by结合使用。

having和where的区别

  • HAVING是在分组后对数据进行过滤,WHERE是在分组前对数据进行过滤
  • HAVING后面可以使用分组函数(统计函数),WHERE后面不可以使用分组函数
  • HAVING子句中可以使用字段别名,而WHERE不能使用
  • HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句,WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句,

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值