MYSQL练题笔记-聚合函数-即时食物配送

我做完上一道题,决定总结一下了,因为现在还是没有一个我认为好的思路去构造语句,这里开始试一试新的思路。果然想要好一点的时候,总是像便秘一下,真的想拉,但是真的难拉啊

一、题目相关内容

1)相关的表和题目

MYSQL练题笔记-聚合函数-即时食物配送_第1张图片

2)帮助理解题目的示例,提供返回结果的格式

MYSQL练题笔记-聚合函数-即时食物配送_第2张图片

二、初步的理解和尝试

1.理解这个表的作用,他的作用是什么?

配送的信息:

delivery_id是主键,配送这件事是不能重复。

Customer_id 发起这个配送的人的id。

order_date客户下单时间

customer_pref_delivery_date 客户指定下单时间

理解了表的目的,需要根据订单的某些信息,把这个订单进行分类。

解题的重点是获取每个用户的即时订单,每个用户的首次订单,最后获取所有用户的的首次订单是即时订单的比率。通过用户Id分组,找出首次订单(回过来其实这个思路还行但是没办法和很多事情结合起来。)

2.第一次尝试

Select Round((Min(order_date)= customer_pref_delivery_date)/count(*)*100,2) as

immediate_percentage from delivery group by customer_id;

我没能理解为什么是这样的结果,过了一天有想法了,就是每一个取值都有,说明我之前的理解还是有错误,要用sum,然后下面是一顿乱操作没有一个对的,现在不是到为什么错,以后做分析吧。

MYSQL练题笔记-聚合函数-即时食物配送_第3张图片

3.又一次尝试

Select Round(count(Min(order_date)= customer_pref_delivery_date)/count(*)*100,2) as

immediate_percentage from delivery group by customer_id;

又有这样的报错

MYSQL练题笔记-聚合函数-即时食物配送_第4张图片

4.又一次尝试

Select Round(select count(1) from delivery where (Min(order_date)= customer_pref_delivery_date)/count(*)*100,2) as

immediate_percentage from delivery group by customer_id;

MYSQL练题笔记-聚合函数-即时食物配送_第5张图片

5.又一次尝试

Select Round(sum(count(Min(order_date)= customer_pref_delivery_date))/count(*)*100,2) as

immediate_percentage from delivery group by customer_id;

MYSQL练题笔记-聚合函数-即时食物配送_第6张图片

三、题解展示和分析

还是看题解了,这一题还是没想出来。

MYSQL练题笔记-聚合函数-即时食物配送_第7张图片

好牛,先把所有用户的首次订单筛选出来,然后算首次订单里面同时也是即使订单的记录数,除以总记录数就行了。

这里还有一个新的用法 where in。

我的理解是字段在in后面的条件里的记录可表示出来。

Where通过in的方式提取,很需要思考,什么情况能这样做呢?                                                

四、总结

1.where in  没太多的想法,因为我认为还没掌握这个方法,只做个简单的记录。

2.让人成长也是挫败的一题啊。

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