Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql group_concat替换方案

作者:潇洒一醉   发布日期:2026-08-05   浏览:75

-- 示例代码:使用子查询和字符串拼接函数来替代 GROUP_CONCAT

-- 假设我们有一个名为 orders 的表,其中包含 customer_id 和 order_id 两列。
-- 我们希望按照 customer_id 分组,并将每个客户的 order_id 拼接成一个字符串。

-- 使用 GROUP_CONCAT 的原始查询:
SELECT customer_id, GROUP_CONCAT(order_id ORDER BY order_id SEPARATOR ', ') AS order_ids
FROM orders
GROUP BY customer_id;

-- 替换方案 1:使用子查询和字符串拼接函数
SELECT customer_id,
       (SELECT GROUP_CONCAT(order_id ORDER BY order_id SEPARATOR ', ')
        FROM orders o2
        WHERE o2.customer_id = o1.customer_id) AS order_ids
FROM (SELECT DISTINCT customer_id FROM orders) o1;

-- 替换方案 2:使用字符串拼接函数和变量(适用于 MySQL 8.0+)
WITH RECURSIVE order_list AS (
    SELECT customer_id, CAST(order_id AS CHAR) AS order_ids, 1 AS level
    FROM orders
    UNION ALL
    SELECT o.customer_id, CONCAT(ol.order_ids, ', ', o.order_id), ol.level + 1
    FROM orders o
    JOIN order_list ol ON o.customer_id = ol.customer_id AND o.order_id > ol.order_id
)
SELECT customer_id, MAX(order_ids) AS order_ids
FROM order_list
GROUP BY customer_id;

-- 解释说明:
-- 1. 替换方案 1 使用了子查询和字符串拼接函数,通过子查询为每个 customer_id 获取拼接后的 order_ids。
-- 2. 替换方案 2 使用了递归 CTE(Common Table Expression),适用于 MySQL 8.0 及以上版本。它通过递归地拼接每个 customer_id 的 order_id 来实现类似 GROUP_CONCAT 的效果。

上一篇:mysql json 函数

下一篇:mysql ceil

大家都在看

mysql二级索引

mysqlavg函数保留小数

mysql显示表内容

mysql收集表统计信息

mysql经纬度距离计算

mysql 加密

mysql大小写转换函数

存储过程mysql

mysql 1265

mysql with语句

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站