如何解决使用count和group_contat后如何求总数
所以我制作了一个显示总数的表格,但总数不正确。
SQL 小提琴:http://sqlfiddle.com/#!9/de76b6e/12
预期输出:
客户名称 | 客户电话 | 地址 | 服务 | 总计 |
---|---|---|---|---|
陈大文 | 12345678 | 湾仔坚尼地街82号 | 地毯(2),沙发(1) | 1120 |
黄启东 | 28473465 | 湾仔坚尼地道24号 | 床垫(1) | 100 |
陈大文 | 63827482 | 湾仔皇后大道东26号 | 地毯(1) | 500 |
实际输出:
客户名称 | 客户电话 | 地址 | 服务 | 总计 |
---|---|---|---|---|
陈大文 | 12345678 | 湾仔坚尼地街82号 | 地毯(2),沙发(1) | 620 |
黄启东 | 28473465 | 湾仔坚尼地道24号 | 床垫(1) | 100 |
陈大文 | 63827482 | 湾仔皇后大道东26号 | 地毯(1) | 500 |
我的数据:
INSERT INTO MAIN VALUES(
null,'Carpets','2021-03-09','1');
INSERT INTO MAIN VALUES(
null,'Sofas','1');
INSERT INTO MAIN VALUES(
null,'Mattresses','2021-03-10','2');
INSERT INTO MAIN VALUES(
null,'2021-03-11','3');
INSERT INTO MAIN VALUES(
null,'1');
/***** CREATE SERVICE **************************************************/
DROP TABLE IF EXISTS SERVICE;
CREATE TABLE SERVICE(
ServiceName VarChar(20) NOT NULL,CPS Numeric(20) NOT NULL,CONSTRAINT SERVICE_PK PRIMARY KEY(ServiceName)
);
/***** SERVICE DATA ***********************************************************/
INSERT INTO SERVICE VALUES('Carpets',500);
INSERT INTO SERVICE VALUES('Sofas',120);
INSERT INTO SERVICE VALUES('Mattresses',100);
INSERT INTO SERVICE VALUES('Curtains',80);
/***** CREATE CLIENT ***********************************************************/
DROP TABLE IF EXISTS CLIENT;
CREATE TABLE CLIENT (
ClientID Int auto_increment NOT NULL,ClientName Char (50) NOT NULL,ClientPhone Int (8) NOT NULL,Address VarChar(100) NULL,CONSTRAINT CLIENT_PK PRIMARY KEY(ClientID)
);
/***** CLIENT DATA *************************************************************/
INSERT INTO CLIENT VALUES(
null,'Chan Tai Man','12345678','82 Kennedy Street,Wan Chai');
INSERT INTO CLIENT VALUES(
null,'Wong Kai tung','28473465','24 Kennedy Road,'63827482','26 Queen Road East,Wan Chai');
/***********************************************************************************/
我的代码:
SELECT CLIENT.ClientName,CLIENT.ClientPhone,CLIENT.Address,GROUP_CONCAT(MAIN.Num) AS Services,SUM(SERVICE.CPS) AS Total
FROM (
SELECT DOS,InvoiceID,ClientID,ServiceName,CONCAT(ServiceName,'(',count(ServiceName),')') AS Num
From MAIN
GROUP BY ClientID,ServiceName
) MAIN
LEFT JOIN CLIENT ON MAIN.ClientID = CLIENT.ClientID
LEFT JOIN SERVICE ON MAIN.ServiceName = SERVICE.ServiceName
GROUP BY CLIENT.ClientID
ORDER BY MAIN.DOS;
解决方法
问题是您在汇总值之后进行 SUM。您应该在子查询中对服务表进行总和和 JOIN,例如:
SELECT CLIENT.ClientName,CLIENT.ClientPhone,CLIENT.Address,GROUP_CONCAT(MAIN.Num) AS Services,sum(main.Total) as total
FROM (
SELECT DOS,InvoiceID,ClientID,main.ServiceName,CONCAT(main.ServiceName,'(',count(main.ServiceName),')') AS Num,SUM(SERVICE.CPS) AS Total
From MAIN
LEFT JOIN SERVICE ON MAIN.ServiceName = SERVICE.ServiceName
GROUP BY ClientID,ServiceName
) MAIN
LEFT JOIN CLIENT ON MAIN.ClientID = CLIENT.ClientID
GROUP BY CLIENT.ClientID
ORDER BY MAIN.DOS;
除此之外,我不会使用与表名相同的名称作为别名
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。