sqlserver数据库学习感悟(1)----关于group by

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: sqlserver数据库学习感悟(1)----关于group by

以下含编写过程,如果嫌啰嗦,最后有总结哒!


例题:有heat表和eatables两张表,分别为:


eatables



heat:protein(蛋白质),fat(脂肪),sugar(含糖量),kj(热量)



平均热量最高的食物是哪一类:


当我们这样写时:


select type,avg(kj)
from heat,eatables
group by type

结果为:



这个结果计算的是所有食物的平均热量,没有将两张表联系起来

select avg(kj) from heat

所以改进为:


select avg(kj)
from heat,eatables
group by type
having heat.id=eatables.id

这样写也是不对的,会报:


HAVING 子句中的列 'heat.id’无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。


所以having中的列名,必须包含在group by中


如果我们将heat.id和eatables.id放到group by中


select avg(kj),type
from heat,eatables
group by type,heat.id,eatables.id
having heat.id=eatables.id

就相当于按照每个食品的id分,即相当于没有分,得到结果为:



所以最后应该写为:where .....group by


select avg(kj),type
from eatables,heat
where eatables.id=heat.id
group by type

结果为:



平均热量最高的食物:


select top 1 type, avg(kj) 平均热量
from eatables,heat
where eatables.id=heat.id
group by type
order by avg(kj) desc

最后结果得:



再来看一个例子:

检索每个食品类别中,蛋白质含量最高的食物:


select type,name,max(protein)
  from heat,eatables
  where heat.id=eatables.id
  group by type

这样写是错误的:选择列表中的列 'eatables.name’无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。


接下来就是处理name的问题了:


同理,如果将name写入group by,得到的结果是每个食品的蛋白质含量



select name
from heat,eatables
where heat.id=eatables.id
and protein = max(protein) 
group by type

这样写也是错的:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。


就算把protein移动到group by也是报错


select name
from heat,eatables
where heat.id=eatables.id 
group by type
having protein = max(protein)

错误1:name不在聚合函数或group by中


错误2:protein不在聚合函数或group by中


如果我们将name或者protein加入group by则会出现所有食品,一切都是徒劳!


所以正确的写法应为


select name,a.type,max
from(select type,max(protein) max 
from eatables,heat
where heat.id = eatables.id
group by type)p,eatables as a,heat as b
where b.protein=p.max and a.id=b.id

新建一个表,包含type和其最高蛋白质含量,最后加入name


所以总结下来:


错误:HAVING 子句中的列 'heat.id’无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。


解决措施:select 和group by中的列名应该出现在group by中,如果有其他列名可以写在where中,实在不行,考虑在查询中再建立一个表进行查询


错误:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。


解决措施:where中不能sum(),avg(),max(),min()等聚合函数,但是聚合函数可以位于having子句中,或选择列表所包含的子查询中,并且对其进行聚合的列是外部引用(就像上面最后一个例子那样)。


刚学数据库,不要向我这样犯低级错误啦,最后最后如果这篇文章对你有帮助,能给我个赞吗!!


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
1月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
2月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
62 16
|
3月前
|
SQL 数据库
数据库数据恢复—SQL Server报错“错误 823”的数据恢复案例
SQL Server数据库附加数据库过程中比较常见的报错是“错误 823”,附加数据库失败。 如果数据库有备份则只需还原备份即可。但是如果没有备份,备份时间太久,或者其他原因导致备份不可用,那么就需要通过专业手段对数据库进行数据恢复。
|
4月前
|
数据库 Windows
SqlServer数据恢复—SqlServer数据库所在分区损坏的数据恢复案例
一块硬盘上存放的SqlServer数据库,windows server操作系统+NTFS文件系统。由于误操作导致分区损坏,需要恢复硬盘里的SqlServer数据库数据。
|
5月前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
116 15
|
6月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
269 4
|
6月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
269 1
|
6月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
203 1
|
12天前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
2月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库

热门文章

最新文章