我有一个MySQL表,其中记录了项目、品牌、型号和序列号,如下所示:

项目表

item_name make model serial_no qty
Computer HP Pro 300D 123ert34c10 1
Computer HP Pro 400D 123xgt34c110 1
Printer Canon ir1210 56tyu78 1
Computer HP Pro 400D 123xgt34c111 1
Printer Canon ir1215 gh90fr 1
UPS APC A200 apc5640400 1
UPS APC A300 apc5640401 1
Computer HP Pro 300D 123ert34c13 1

然后,我需要按Item_Name和Make对项目进行分组.还需要在组摘要中显示所有型号和序列号,如下所示:

期望输出

item_name make model serial_no qty
Computer HP Pro 300D, Pro 400D 123ert34c10, 123ert34c13, 123xgt34c110, 123xgt34c111 4
Printer Canon ir1210, ir1215 56tyu78, gh90fr 2
UPS APC A200, A300 apc5640400, apc5640401 2

我使用了以下简单的查询来完成此操作.

SELECT item_name, make, model, serial_no, SUM(qty) AS qty FROM item GROUP BY item_name, make 

但查询将输出以下输出,而不显示相关Item_NAME&Made下的所有型号和序列号.

输出不正确

item_name make model serial_no qty
Computer HP Pro 300D 123ert34c10 4
Printer Canon ir1210 56tyu78 2
UPS APC A200 apc5640400 2

一些型号的序列号不见了.可能会出什么问题.有谁能帮忙吗?

推荐答案

你可以通过使用GROUP_CONCAT()来达到Desired_Output.这是改装后的sql

SELECT
    item_name,
    make,
    GROUP_CONCAT(DISTINCT model ORDER BY model) AS model,
    GROUP_CONCAT(DISTINCT serial_no ORDER BY serial_no) AS serial_no,
    SUM(qty) AS qty
FROM item
GROUP BY item_name, make;

DISTINCT确保modelserial_no只包含一次,而GROUP_CONCAT则在使用ORDER BY对结果进行排序后将其连接起来

Mysql相关问答推荐

返回50%的随机结果

我可以指示MariaDB-Install-db和MariaDB忽略配置中的用户设置吗?

如何在JOIN中获取MySQL中的项目总数

含有子查询的MySQL函数出现语法错误

在MySQL CLI中,是否有自动完成过程的方法?

表列中的SQL SUM MENY值记录单个查询

最终的自联表是如何记住关联的呢?

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

docker-compose:无法将应用程序服务连接到 mysql 数据库,收到错误:用户‘root’@‘localhost’访问被拒绝(使用密码:YES)

从 NextJS/Prisma 添加用户 ID (FK) 到 MySQL 表

获取每个参数的记录,不重复

使用 JOIN 计算列中的所有值

MySQL查询以获取日期范围内的租赁订单

MariaDB 下的慢速更新、删除和插入查询

动态创建内联 SQL 表(用于排除左连接)

MySQL INSERT IF(自定义 if 语句)

MySQL ORDER BY rand(),名称为 ASC

带有 LIKE 运算符的 Select 语句中的 MySQL case

为什么在 MySQL 中使用外键约束?

我在哪里可以下载 mysql jdbc jar?