MySQL(三)

聚合函数

聚合函数表示对值集合进行操作的组(集合)函数。

# 华为手机价格的平均值
SELECT AVG(price) FROM `products` WHERE brand = '华为’;
# 计算所有手机的平均分
SELECT AVG(score) FROM `products`;
# 手机中最低和最高分数
SELECT MAX(score) FROM `products`;
SELECT MIN(score) FROM `products`;
# 计算总投票人数
SELECT SUM(voteCnt) FROM `products`;
# 计算所有条目的数量
SELECT COUNT(*) FROM `products`;
# 华为手机的个数
SELECT COUNT(*) FROM `products` WHERE brand = '华为';

在这里插入图片描述
认识Group By

事实上聚合函数相当于默认将所有的数据分成了一组:

        我们前面使用avg还是max等,都是将所有的结果看成一组来计算的;

        那么如果我们希望划分多个组:比如华为、苹果、小米等手机分别的平均价格,应该怎么来做呢?

        这个时候我们可以使用 GROUP BY;

GROUP BY通常和聚合函数一起使用:

        表示我们先对数据进行分组,再对每一组数据,进行聚合函数的计算;

我们现在来提一个需求:

        根据品牌进行分组;

        计算各个品牌中:商品的个数、平均价格

        也包括:最高价格、最低价格;

SELECT brand,
COUNT(*) as count,
ROUND(AVG(price),2) as avgPrice,
MAX(price) as maxPrice,
MIN(price) as minPrice,
AVG(score) as avgScore
FROM `products` GROUP BY brand;

Group By的约束

使用我们希望给Group By查询到的结果添加一些约束,那么我们可以使用:HAVING。

比如:如果我们还希望筛选出平均价格在4000以下,并且平均分在7以上的品牌:

SELECT brand,
   COUNT(*) as count,
   ROUND(AVG(price),2) as avgPrice,
   MAX(price) as maxPrice,
   MIN(price) as minPrice,
   AVG(score) as avgScore
FROM `products` GROUP BY brand
HAVING avgPrice < 4000 and avgScore > 7;

创建多张表

假如我们的商品表中,对应的品牌还需要包含其他的信息:

        比如品牌的官网,品牌的世界排名,品牌的市值等等;

如果我们直接在商品中去体现品牌相关的信息,会存在一些问题:

        一方面,products表中应该表示的都是商品相关的数据,应该又另外一张表来表示brand的数据;

        另一方面,多个商品使用的品牌是一致时,会存在大量的冗余数据;

所以,我们可以将所有的品牌数据,单独放到一张表中,创建一张品牌的表:

create table if not exists `brand`( 
id int primary key auto_increment, 
name varchar(20) not null,
website varchar(100), 
worldrank int
);

create table if not exists `products`(
`id` int primary key auto_increment,
`title` varchar(20),
`description` varchar(200),
`price` double,
`publishtime` datetime
);

插入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值