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

news/2024/10/23 16:10:36/

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.ppmy.cn/news/1541375.html

相关文章

计算机网络:数据链路层 —— 无线局域网 WLAN

文章目录 局域网无线局域网 WLAN802.11 无线局域网802.11无线局域网的组成WLAN 的组成有固定基础设施的802.11无线局域网漫游服务 无固定基础设施的802.11无线局域网 802.11无线局域网的物理层802.11无线局域网的数据链路层不使用碰撞检测 CD 的原因CSMA/CA 协议CSMA/CA 协议的…

spring揭秘31-spring任务调度02-spring集成任务执行与调度-spring官方文档

文章目录 【README】【1】spring任务执行器&#xff08;TaskExecutor&#xff09;抽象【1.1】TaskExecutor实现类&#xff08;执行器&#xff09;【1.2】使用TaskExecutor代码实践 【2】spring任务调度抽象(TaskScheduler)【2.1】Trigger触发器接口【2.1.1】 Trigger实现类 【2…

最新仿蓝奏网盘系统源码-附教程-自带的蓝奏云解析支持自定义广告

简介&#xff1a; 自带的蓝奏云解析&#xff0c;是之前的代码&#xff0c;截至发帖时间&#xff0c;亲测依旧有效&#xff0c;可以扒拉下来做蓝奏云解析接口。 使用方法&#xff1a;可以将文件上传至蓝奏云&#xff0c;然后通过此套系统&#xff0c;二次解析下载&#xff0c;不…

CTF入门指南!攻破CTF学习难题:只需几步,轻松入门!

2024年最新的CTF&#xff08;Capture The Flag&#xff0c;夺旗赛&#xff09;入门指南如下&#xff0c;涵盖了入门思路、常见题型及练习网站推荐&#xff0c;帮助你逐步了解并提升在CTF中的解题技巧。 如果你对网络安全入门感兴趣&#xff0c;我给大家整理好了相关资料&#…

【思维】 矩阵(matrix)题解

题意 给定 n n ( 2 ≤ n ≤ 2000 ) n \times n(2 \leq n \leq 2000) nn(2≤n≤2000) 的矩阵&#xff0c;每格中有一个权值。初始时权值全部为 0 0 0&#xff0c;mxjz666 对其进行若干次操作&#xff0c;每次选定一行或一列&#xff0c;对于这一行或这一列加上某个正整数&am…

react子应用嵌入qiankun微前端后,多层抽屉drawer getContainer={false}挂载在当前位置后抽屉不在停靠在窗口的最边上

问题&#xff1a;react子应用嵌入qiankun微前端后&#xff0c;多层抽屉drawer getContainer{false}挂载在当前位置后抽屉不在停靠在窗口的最边上&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a; 将抽屉都弹出到这个子页面的最外层容器。即设置getContainer{() >…

Eclipse 软件:配置 JDBC、连接 MySQL 数据库、导入 jar 包

目录 一、配置 JDBC &#xff08;一&#xff09;作用 &#xff08;二&#xff09;官网下载 1. 下载链接 2. 下载 3. 补充&#xff1a;压缩包分类与用途 &#xff08;三&#xff09;eclipse 导入 JDBC 的 jar 包 &#xff08;四&#xff09;加载数据库驱动 &#xff08;五…

CentOS上安装SSL证书教程

在 CentOS 上&#xff0c;apt-get 是不可用的&#xff0c;因为 CentOS 使用的是 yum 或 dnf 包管理器。你可以通过 yum 或 dnf 安装 certbot 和 python3-certbot-nginx。以下是详细的步骤&#xff1a; 1. 启用 EPEL&#xff08;Extra Packages for Enterprise Linux&#xff0…