当前位置: 首页 > news >正文

MySql数据库left join中添加子查询

user表查询出数据列表(多条,如id)左连接到order表中的order_agent_id字段,并通过 order_agent_id分组,求和user_order_partner,使用COALESCE()聚合函数对未获取到和值的进行默认赋值,防止查询不出数据不显示问题

SELECT COUNT(*)
FROM (SELECT t.id,t1.create_time AS createTime,t.user_nickname,t.user_image AS userImg,t.user_tel,COALESCE(t1.total_price, '0.00') AS priceFROM db_user tLEFT JOIN (SELECT order_agent_id, create_time, COALESCE(SUM(user_order_partner), '0.00') AS total_priceFROM db_user_orderWHERE order_status = 1 AND deleted = 0GROUP BY order_agent_id, create_time) AS t1 ON t.id = t1.order_agent_idWHERE t.deleted = 0 AND (t.user_partner_id = ? AND t.user_level <> ?)ORDER BY t1.total_price DESC
) AS TOTAL;
  1. 最外层查询‌:

    SELECT COUNT(*) FROM (...) AS TOTAL;

    这部分查询计算内部查询(即括号内的查询)返回的行数。TOTAL是一个别名,用于表示内部查询的结果集。

  2. 内部查询‌:

        SELECT t.id,t1.create_time AS createTime,t.user_nickname,t.user_image AS userImg,t.user_tel,COALESCE(t1.total_price, '0.00') AS priceFROM db_user tLEFT JOIN (SELECT order_agent_id, create_time, COALESCE(SUM(user_order_partner), '0.00') AS total_priceFROM db_user_orderWHERE order_status = 1 AND deleted = 0GROUP BY order_agent_id, create_time) AS t1 ON t.id = t1.order_agent_idWHERE t.deleted = 0 AND (t.user_partner_id = ? AND t.user_level <> ?)ORDER BY t1.total_price DESC

    这部分查询执行以下操作:

    • db_user表中选择用户信息。
    • 通过左连接(LEFT JOIN)将db_user表与一个子查询结果连接。子查询从db_user_order表中计算每个order_agent_idcreate_time组合的订单总额(user_order_partner的和)。
    • 使用COALESCE函数确保如果total_priceNULL,则将其替换为'0.00'上面的COALESCE(t1.total_price, '0.00') AS price必须保留,因为在下面子查询中的COALESCE(SUM(user_order_partner), '0.00') AS total_price仅作为提示使用,可以直接写成SUM(user_order_partner) AS total_price,子查询中的值不会因为有COALESCE函数而传递默认值出去,外面查询语句中获取的t1.total_price依然会是NULL。此处需注意。
    • 应用WHERE子句来过滤出未删除的用户,并且其user_partner_id等于某个值且user_level不等于另一个值。
    • 使用ORDER BY子句按total_price降序排序结果。
  3. 参数占位符‌:
    查询中的?是参数占位符,用于在执行查询时提供具体的值。例如,t.user_partner_id = ?中的?应该被替换为一个具体的用户伙伴ID值。

  4. 结果‌:
    最终,这个查询返回一个数字,表示满足条件的用户订单记录的数量。注意,尽管内部查询包含ORDER BY子句,但外部查询的COUNT(*)并不关心行的顺序,它只计算行数。

在实际应用中,需要替换占位符?为具体的值,并执行这个查询来获取结果。这个查询可能用于报告或分析目的,以了解有多少用户满足特定的订单和用户条件。


http://www.mrgr.cn/news/55307.html

相关文章:

  • 今日头条躺赚流量:自动化新闻爬取和改写脚本
  • 1. 路由定义
  • Python数据处理工具笔记 - matplotlib, Numpy, Pandas
  • k8s 配置私有镜像仓库认证
  • 394.字符串解码
  • Qt中使用线程之QThread
  • JVM参数
  • 终于把Vision Transformer(ViT)搞懂了!
  • 估值与周期风险评估(2024/09/29)
  • Android面试之5个性能优化相关的深度面试题
  • Shell学习——shell中的变量
  • 1.深入理解MySQL索引底层数据结构与算法
  • FuLID-Flux在ComfyUI下报错的问题解决办法
  • 贪心day6
  • 2024年双11买什么最划算?双十一购物清单,双十一囤货清单排名
  • 高速缓冲存储器Cache是如何工作的、主要功能、高速缓冲存储器Cache和主存有哪些区别
  • 如何通过ChatGPT快速编写代码、解决bug、优化代码、推荐技术解决方案(完整教程)
  • 【AscendC】配置ModelArts的算子开发环境
  • Transformer(Vit+注意力机制)
  • JDBC——(3)
  • 如何修改Ubuntu系统的共享内存shm大小
  • 在西班牙买可乐喝时常用的句子,柯桥西班牙语培训
  • 使用Python处理API数据时,有哪些常见的数据清洗技巧?
  • 推荐一款专为Nginx设计的图形化管理工具: Nginx UI!
  • Docker笔记-搭建私有仓库
  • AI大模型混战后,以知识为中心驱动的人工智能迎来风口?