再见!地球人 2021-06-20 22:08 采纳率: 0%
浏览 19

遇到图一的问题,但是按网上看的,像图二一样没反应怎么办

 

  • 写回答

1条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-16 15:23
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述: 现有一张表orders,记录了订单信息,其中包含字段order_id、user_id、create_time、pay_time、price等。 请编写SQL查询语句,找出在2021年6月1日-2022年1月1日之间,每个用户的总订单数、总订单金额、第一笔订单的创建时间、最后一笔订单的支付时间以及最大订单金额。 要求:
    1. 结果按照total_order_num(总订单数)降序排列。
    2. 如果一个用户在该时间段内没有订单,也要在结果中显示,对应的total_order_num、total_order_price为0,first_order_create_time、last_order_pay_time、max_order_price为null。
    3. 不要含有重复的用户信息。 示例数据: | order_id | user_id | create_time | pay_time | price | | -------- | ------- | -------------| -------------| ------| | 1 | 1 | 2021-06-10 | 2021-06-11 | 50 | | 2 | 1 | 2021-07-12 | 2021-07-13 | 30 | | 3 | 1 | 2022-02-28 | 2022-03-01 | 80 | | 4 | 2 | 2021-08-01 | 2021-08-02 | 100 | | 5 | 2 | 2022-01-10 | 2022-01-11 | 80 | | 6 | 3 | 2021-12-20 | 2021-12-21 | 70 | 示例输出: | user_id | total_order_num | total_order_price | first_order_create_time | last_order_pay_time | max_order_price | | ------- | --------------- | -----------------| -----------------------| --------------------| --------------- | | 2 | 2 | 180 | 2021-08-01 | 2022-01-11 | 100 | | 1 | 2 | 80 | 2021-06-10 | 2022-03-01 | 50 | | 3 | 1 | 70 | 2021-12-20 | 2021-12-21 | 70 | | 4 | 0 | 0 | null | null | null | | 5 | 0 | 0 | null | null | null | SQL语句:
    SELECT 
        o.user_id as user_id, 
        count(DISTINCT o.order_id) as total_order_num,
        COALESCE(sum(o.price), 0) as total_order_price,
        MIN(o.create_time) as first_order_create_time,
        MAX(o.pay_time) as last_order_pay_time,
        MAX(o.price) as max_order_price
    FROM 
        (SELECT * FROM orders WHERE create_time BETWEEN '2021-06-01' AND '2022-01-01') o
    RIGHT JOIN
        (SELECT DISTINCT user_id FROM orders) u
    ON
        o.user_id = u.user_id
    GROUP BY 
        o.user_id
    ORDER BY 
        total_order_num DESC
    

    解释: 1. 首先在orders表中筛选出满足时间条件的订单信息,使用子查询的方式 2. 对DISTINCT的user_id进行聚合统计每个用户的total_order_num和total_order_price; 3. 对于第一笔订单的创建时间,最后一笔订单的支付时间以及最大订单金额,使用聚合函数MIN、MAX进行计算即可 4. 使用RIGHT JOIN来避免没有订单信息的用户被忽略。 5. 使用COALESCE函数来防止total_order_price为null的情况。 6. 最后按total_order_num进行降序排序。

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)