MYSQL练题笔记-聚合函数-平均售价

一、题目相关内容

1)相关的表

MYSQL练题笔记-聚合函数-平均售价_第1张图片

2)题目

3)帮助理解题目的示例,同时得知查询结果的格式

MYSQL练题笔记-聚合函数-平均售价_第2张图片

二、自己初步的理解

1)使用平均数函数和四舍五入函数;

2)售卖出去的产品有purchase_date的值,可能有卖出去多个,但是也有可能没有售卖出去,需要留意一下,下面是我初步的框架。

Select product_id,round(,2) from prices p left join unitsSold u on p.product_id=u.product_id group by prodect_id;

3)然后重点是算平均数,然后发现很多之前没理解到位的;

我看到都没有一个没有卖出去的产品的设置。也可能是我现在没想通

他的units不是单位啊,是卖出去的产品的个数啊。

价格表看示例才知道原来同一产品可以在不同的时期啊,要仔细审题啊。

又发现一个问题unitsSold表里的购买日期要在prices的购买日期之内,不然两张表连接的时候没办法一一对应!!下面是我第一次尝试运行的代码,发现忘记别名了,函数用错了。

Select product_id,round(avg(price*units),2) from prices p left join unitsSold u on p.product_id=u.product_id and u.purchase_date >= p.start_date and u.purchase_date <= p.end_date group by product_id;

Oh,通过结果反复修改成功啦!就是下面的代码,但是还是有一个注意的点,我对于第一个查询的表名,刚开始还是没有意识到需要加表名,填哪一个结果是不一样的,后面我尝试了一下,有些疑问在下一个部分。

Select p.product_id,round(sum(price*units)/sum(units),2) as average_price from prices p left join unitsSold u on p.product_id=u.product_id and u.purchase_date >= p.start_date and u.purchase_date <= p.end_date group by product_id;

但是我只是运行的时候成功了,但是提交的时候失败了,他果然设置了一个为0的结果,哈哈哈原来我之前的猜测是可以的这里到了这里我也知道是要加ifnull(),而且运行时间很不错啊,下面是我最终提交的代码。

Select p.product_id,round(Ifnull(sum(price*units)/sum(units),0),2) as average_price

from prices p left join unitsSold u on p.product_id=u.product_id and u.purchase_date >= p.start_date and u.purchase_date <= p.end_date group by product_id;

三、自己的疑问

1.如果查询u表的product_id就是错的,就是下图的结果。

MYSQL练题笔记-聚合函数-平均售价_第3张图片

2.如果是p表的product_id就成功的,如下图。

MYSQL练题笔记-聚合函数-平均售价_第4张图片

3.这是为什么啊?

感觉这个和左连接有关系,又和我之前的那个连接里的疑问联系到一起了。但是我还是不理解为什么会有null出现啊!!!

是不是我左连接没有真正的了解?

左边不满足on后面条件的也会列出来,只是其他的空值为NULL;

右边的就是满足条件的才会列出来。

四、总结

1.还是看了下排名第一的人的题解,原来<= 和 >=之间的关键词是between and。

2.连接后实际的表的样子,我觉得我其实还是没有想通,所以才有上面的疑问,继续思考吧。

你可能感兴趣的:(mysql,笔记,数据库)