首页 > 数据库 >SQL题:某外卖平台有users(用户表),restaurants(餐厅表),orders(订单表)

SQL题:某外卖平台有users(用户表),restaurants(餐厅表),orders(订单表)

时间:2024-09-10 18:52:21浏览次数:13  
标签:users restaurant orders user 外卖 date order id select

一、进行表的创建

-- 用户表
create table if not exists users (
	user_id int,
    user_name string,
    password string,
    email string,
    phone_number string,
    address string
)
row format delimited
fields terminated by ',';

-- 餐厅表
create table if not exists restaurants (
    restaurant_id int,
    restaurant_name string,
    restaurant_address string,
    restaurant_phonenumber string,
    cuisine_type string
)
row format delimited
fields terminated by ',';

-- 订单表
create table if not exists orders (
    order_id int,
    user_id int,
    restaurant_id int,
    order_date string,
    total_amount string,
    order_status string
)
row format delimited
fields terminated by ',';

二、对需求进行解答

1. 查询五一期间(2023-05-01 ~ 2023-05-07),每个餐厅的订单总数量及排名

with t as (
    -- 五一期间每一个餐厅的订单总数
    select restaurant_id,count(1) totalNum  from orders
         where order_date >='2023-05-01 00:00:00' and order_date <='2023-05-07 23:59:59'
         group by restaurant_id
)
select *,dense_rank() over (order by totalNum desc) from t ;

2. 查看最近一个月内在一家餐厅重复购买 3 次以上的餐厅名字、用户名字、购买次数

with t as (
    select r.restaurant_name,u.user_name,o.order_id from orders o , restaurants r ,users u
     where o.restaurant_id = r.restaurant_id and o.user_id = u.user_id
     and substr(o.order_date,1,10) >= add_months(`current_date`(),-1)
)
select t.restaurant_name,t.user_name,count(1) orderNum from t group by t.restaurant_name,t.user_name having orderNum >=3;

3. 查看订单最多的用户ID、用户名(包含并列第一的情况)

-- 3. 查看订单最多的用户ID、用户名(包含并列第一的情况)

with t as (
    select u.user_id,u.user_name,count(1) ordernum from
        orders o join users u on o.user_id = u.user_id
    group by u.user_id,u.user_name
),t2 as (
    select *,dense_rank() over (order by ordernum desc) pm from t
)
select * from t2 where pm = 1;

 4. 查询至少被三个不同用户消费过的餐厅

select restaurant_id,count(distinct user_id) userNum from orders group by restaurant_id
  having userNum>=3;

5. 查询在五一期间,每个用户消费的餐厅前三名(按照消费的金额计算)


select substr(order_date,6,5) from orders limit 1;
with t as (
   select user_id,restaurant_id,sum(total_amount) orderMoney from orders where substr(order_date,6,5) >='05-01' and substr(order_date,6,5) <='05-07'
                     group by user_id,restaurant_id
),t2 as (
    select *,dense_rank() over (partition by user_id order by orderMoney desc) pm from t
)
select * from t2 where pm <=3;

6. 查询每一个用户在最近一个月内的订单量,以及上一个月的订单量

select
    user_id,
     count(case when substr(order_date,1,10) between add_months(`current_date`(),-1)  and `current_date`() then 1 else null end ) `最近一个月订单数`,
     count(case when substr(order_date,1,10) between add_months(`current_date`(),-2)  and date_sub(add_months(`current_date`(),-1),1) then 1 else null end ) `上个月订单数`

   from orders group by user_id ;

7. 查询每一个餐厅当月订单数量、上月订单数量、订单数量环比增长率,按照环比增长率降序排列

环比增长率:(当月订单数量 - 上月订单数量)/ 上月订单数量

with t as (
    select restaurant_id,
       count(case when substr(order_date,1,10) between add_months(`current_date`(),-1)  and `current_date`() then 1 else null end ) dydds,
       count(case when substr(order_date,1,10) between add_months(`current_date`(),-2)  and date_sub(add_months(`current_date`(),-1),1) then 1 else null end ) sydds
       from orders group by restaurant_id
)
select restaurant_id,(dydds-sydds)/sydds zzlv from t order by zzlv desc ;

8. 查询每个用户的订单金额排名,显示排名前三的用户及其订单金额


with t as (
    select user_id,sum(total_amount) totalMoney from orders group by user_id
),t2 as (
    select *,dense_rank() over (order by totalMoney desc) pm from t
)
select *,u.user_name from t2,users u where t2.user_id=u.user_id and pm <= 3;

9. 查询每一个顾客的总下单数量和总消费金额

select user_id,count(1),sum(total_amount) from orders group by user_id;

10. 查询五一期间,消费总金额高于平均值的用户

select avg(total_amount) from orders where substr(order_date,6,5) >='05-01' and substr(order_date,6,5) <='05-07';

select user_id,sum(total_amount) totalMoney from orders
     where substr(order_date,6,5) >='05-01' and substr(order_date,6,5) <='05-07' group by user_id
     having sum(total_amount) >(select avg(total_amount) from orders where substr(order_date,6,5) >='05-01' and substr(order_date,6,5) <='05-07');

11. 查询最后一个订单距离现在时间超过 5 天的用户,以及天数


select user_id,max(order_date),datediff(`current_date`(),max(order_date)) days from orders group by user_id having max(user_id) < date_sub(`current_date`(),5);

12. 查询具有最多订单的餐厅所在城市的名称和订单数量


with t as (
    select r.restaurant_name,r.restaurant_address,count(1) orderNum from orders o join restaurants r on o.restaurant_id = r.restaurant_id
     group by r.restaurant_name,r.restaurant_address
),t2 as (
    select *,dense_rank() over ( order by orderNum desc) pm from t
)
select * from t2 where pm = 1;

标签:users,restaurant,orders,user,外卖,date,order,id,select
From: https://blog.csdn.net/wadjdkdkdjjd/article/details/142106268

相关文章

  • 基于Node.js+vue基于的外卖订餐系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能手机的普及,外卖订餐服务已成为现代生活中不可或缺的一部分。人们越来越倾向于通过便捷的手机应用解决日常餐饮需求,这不仅节......
  • Java计算机毕业设计校园外卖点餐平台app(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容进度安排:第一阶段: 熟悉工具,查阅相关资料(1周)第二阶段:分析阶段,确定系统功能及性能等需求(3周)第三阶段:设计阶段,按照需求分析结果,进行系统概要设计及详细设计(3......
  • [苍穹外卖]-03分类管理模块开发
    效果预览需求分析查看产品原型:根据原型分析业务规则业务规则分类名称必须是唯一的分类按照类型可以分为菜品分类和套餐分类新添加的分类状态默认为"禁用"接口设计该模块涉及6个接口:新增分类/分类分页查询/根据id删除分类/修改分类/启用禁用分类/根据类型查询分类......
  • (苍穹外卖)day05 店铺营业状态设置 功能测试
    目录一.Redis入门Redis简介二.Redis数据类型三.Redis常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用命令四.在java中操作RedisRedis的java客户端​编辑五.店铺营业状态设置代码开发 Redis---是一个数据库,用来存储数据......
  • 外卖霸王餐系统如何加入运营
    加入运营外卖霸王餐系统可以从以下几个方面着手: 1.**系统搭建与选择**:-**自行开发**:-**需求分析**:明确系统的功能需求,比如要支持用户注册与登录、活动展示与报名、订单管理、评价系统、返现功能等。同时确定目标用户群体,是面向学生、上班族还是其他特定人群,以便更好地满......
  • 课题分享:外卖点餐系统,基于java+springboot+mysql
      一、前言介绍        计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。人们可以通过计算机上的浏览器访问多个应用系统,从中获取一些可以满足用户生活需求的管理系统。网站系统有时更像是一个大型“展示平台”,人们可以选择所需的信息进行在线下单......
  • 基于Java实现的校园外卖点餐管理系统设计与实现(源码+数据库+部署+文档+讲解视频等)
    文章目录1.前言2.系统演示录像3.论文参考4.代码运行展示图5.技术框架5.1SpringBoot技术介绍5.2Vue技术介绍6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.找我做程序,有什么保障?12.联系我们1.前......
  • 基于外卖业务的数据可视化入门到精通-Vue3.0+EChart4.0
    基于外卖业务的数据可视化入门到精通-Vue3.0+EChart4.0项目分辨率响应式创建 项目顶部信息条创建 页面主体创建  接项目搭建与初始化之后继续对项目进行部署工作项目展示:        技术栈:1.vue3.0+vue-router4.0+axios2.flex布局3.LESS4.rem屏......
  • [苍穹外卖]-01项目搭建
    整体介绍1.软件开发流程需求分析->需求文档,产品原型设计->UI设计,数据库设计,接口设计编码->项目代码,单元测试测试->测试用例,测试报告上线运维->软件环境安装,配置2.角色分工项目经理->任务分配,进度控制产品经理->进行需求调研,输出需求文档,产品原......
  • 基于 Quanto 和 Diffusers 的内存高效 transformer 扩散模型
    过去的几个月,我们目睹了使用基于transformer模型作为扩散模型的主干网络来进行高分辨率文生图(text-to-image,T2I)的趋势。和一开始的许多扩散模型普遍使用UNet架构不同,这些模型使用transformer架构作为扩散过程的主模型。由于transformer的性质,这些主干网络表现出了良好......