mysql group_concat 用于左表和右表

标签 mysql sql select join left-join

我正在使用group_concat函数来聚合已通过左连接对右表(stockout)完成的产品的少量移动。 MySQL 代码如下-

SELECT
    p.serialno AS SISN,
    p.in_quantity AS INQTY, 
    SUM(IFNULL(s.out_quantity, '0')) AS OUTQTY,
        GROUP_CONCAT(
            CONCAT(
                COALESCE(IFNULL(s.out_quantity,'0'), ''),'|'
            )
        ) details
FROM stockin p LEFT JOIN stockout s 
    ON p.serialno = s.serialno
    WHERE p.productid = 'TF00123'
GROUP BY p.stockin_id, p.serialno, s.serialno

输出如下-

+------+-------+--------+--------------------------------+
| SISN | INQTY | OUTQTY | details                        |
+------+-------+--------+--------------------------------+
| AAA1 |   500 |    740 | 300|,100|,50|,50|,20|,20|,200| |
| AAA2 |   500 |      0 | 0|                             |
| AAA3 |     1 |      3 | 1|,1|,1|                       |
| AAA3 |     1 |      3 | 1|,1|,1|                       |
| AAA1 |   200 |    740 | 300|,100|,50|,50|,20|,20|,200| |
| AAA3 |     1 |      3 | 1|,1|,1|                       |
| AAA1 |   100 |    740 | 300|,100|,50|,50|,20|,20|,200| |
+------+-------+--------+--------------------------------+
7 rows in set (0.00 sec)

现在,如果 p.serialno 相同,我想对另一列中的左表数量进行group_concat,例如详细信息。 如果我手动执行,请检查输出 -

+------+-------+------------------+--------+--------------------------------+
| SISN | INQTY | details          | OUTQTY | details                        |
+------+-------+------------------+--------+--------------------------------+
| AAA1 |   800 | 500|,200|,100|   |    740 | 300|,100|,50|,50|,20|,20|,200| |
| AAA2 |   500 | 0|               |      0 | 0|                             |
| AAA3 |     3 | 1|,1|,1|         |      3 | 1|,1|,1|                       |
+------+-------+------------------+--------+--------------------------------+
3 rows in set (0.00 sec)

最佳答案

简单地使用

 GROUP_CONCAT(
            CONCAT(
                COALESCE(IFNULL(p.out_quantity,'0'), ''),'|'
            )
        ) details1

像这样

SELECT
    p.serialno AS SISN, 
    p.in_quantity AS INQTY, 
    GROUP_CONCAT(
            CONCAT(
                COALESCE(IFNULL(p.out_quantity,'0'), ''),'|'
            )
        ) details1
    SUM(IFNULL(s.out_quantity, '0')) AS OUTQTY,
        GROUP_CONCAT(
            CONCAT(
                COALESCE(IFNULL(s.out_quantity,'0'), ''),'|'
            )
        ) details
FROM stockin p LEFT JOIN stockout s 
    ON p.serialno = s.serialno
    WHERE p.productid = 'TF00123'
GROUP BY p.stockin_id, p.serialno, s.serialno

关于mysql group_concat 用于左表和右表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17312072/

相关文章:

mysql - 使用 Spring Boot JPA 在数据库中插入多行

mysql - mysql存储过程中的多选择语句

mysql - 我可以在 MySQL 中自动插入 SSL 证书的 PEM 文件密码吗?

javascript - 保持选择的持久性

sql - 验证两个不同表的两列完全匹配

MySQL 索引列完全还是一一列?

sql - 从执行命令插入临时表

php - 如何将 Propel Criteria 编译为 SQL

sqlalchemy:使用别名从多个连接中选择特定列

mysql - 为什么 MySQL union all 对 "practically"相同的查询显示不同的结果?