Java 从第二个表获取计数(生成的发票数量),从第三个表获取总和(订单总数)-MySQL
我想得到客户生成的发票数量和所有订单的总和。有三个表cust、inv、ord,代表客户、发票、订单 :工作正常:工作正常: 我尝试使用此查询获取使用客户名称生成的发票总数…工作正常Java 从第二个表获取计数(生成的发票数量),从第三个表获取总和(订单总数)-MySQL,java,mysql,sql,Java,Mysql,Sql,我想得到客户生成的发票数量和所有订单的总和。有三个表cust、inv、ord,代表客户、发票、订单 :工作正常:工作正常: 我尝试使用此查询获取使用客户名称生成的发票总数…工作正常 CREATE TABLE IF NOT EXISTS `cust` ( `cId` int(11) NOT NULL, `name` char(25) DEFAULT NULL, PRIMARY KEY (`cId`) ); INSERT INTO `cust` (`cId`, `name`) VALU
CREATE TABLE IF NOT EXISTS `cust` (
`cId` int(11) NOT NULL,
`name` char(25) DEFAULT NULL,
PRIMARY KEY (`cId`)
);
INSERT INTO `cust` (`cId`, `name`) VALUES
(1, 'Danish'),
(2, 'Dilkash'),
(3, 'Dilshad');
CREATE TABLE IF NOT EXISTS `inv` (
`iId` int(11) NOT NULL,
`cId` int(11) DEFAULT NULL,
PRIMARY KEY (`iId`)
);
INSERT INTO `inv` (`iId`, `cId`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(5, 2);
CREATE TABLE IF NOT EXISTS `ord` (
`iId` int(11) DEFAULT NULL,
`cId` decimal(10,0) DEFAULT NULL
);
INSERT INTO `ord` (`iId`, `cId`) VALUES
(1, '50'),
(1, '80'),
(2, '40'),
(3, '20'),
(3, '30'),
(4, '90'),
(5, '60'),
(5, '40');
:工作正常:工作正常:
然后我试图得到所有发票的金额总和,这些发票是按客户分组生成的。。。它也工作得很好
mysql> select cust.cId,cust.name,count(inv.iId)
from cust left join inv on cust.cId=inv.cId group by cust.cId;
+-----+---------+----------------+
| cId | name | count(inv.iId) |
+-----+---------+----------------+
| 1 | Danish | 3 |
| 2 | Dilkash | 2 |
| 3 | Dilshad | 0 |
+-----+---------+----------------+
问题就在这里
但是当我试图得到相同结果的计数和总和时,它不起作用。。。这是计算订单而不是发票
mysql> select cust.cId,cust.name,count(inv.iId)
from cust left join inv on cust.cId=inv.cId group by cust.cId;
+-----+---------+----------------+
| cId | name | count(inv.iId) |
+-----+---------+----------------+
| 1 | Danish | 3 |
| 2 | Dilkash | 2 |
| 3 | Dilshad | 0 |
+-----+---------+----------------+
3 rows in set (0.00 sec)
请更正我的最后一个问题。。。它显示的是5,3,0,这是订单数量,而不是发票数量。。它应该显示3,2,0….您可以使用标量子查询
mysql> select cust.cId,cust.name,count(inv.iId),sum(ord.cId)
from cust left join inv on cust.cId=inv.cId left join ord on inv.iId=ord.iId group by cust.cId;
+-----+---------+----------------+--------------+
| cId | name | count(inv.iId) | sum(ord.cId) |
+-----+---------+----------------+--------------+
| 1 | Danish | 5 | 220 |
| 2 | Dilkash | 3 | 190 |
| 3 | Dilshad | 0 | NULL |
+-----+---------+----------------+--------------+
3 rows in set (0.00 sec)
输出:
select cust.cId,cust.name,(select count(iId) from inv b where cust.cId=b.cId ),
sum(ord.cId)
from cust left join inv on cust.cId=inv.cId left join ord on inv.iId=ord.iId
group by cust.cId
可以使用标量子查询
mysql> select cust.cId,cust.name,count(inv.iId),sum(ord.cId)
from cust left join inv on cust.cId=inv.cId left join ord on inv.iId=ord.iId group by cust.cId;
+-----+---------+----------------+--------------+
| cId | name | count(inv.iId) | sum(ord.cId) |
+-----+---------+----------------+--------------+
| 1 | Danish | 5 | 220 |
| 2 | Dilkash | 3 | 190 |
| 3 | Dilshad | 0 | NULL |
+-----+---------+----------------+--------------+
3 rows in set (0.00 sec)
输出:
select cust.cId,cust.name,(select count(iId) from inv b where cust.cId=b.cId ),
sum(ord.cId)
from cust left join inv on cust.cId=inv.cId left join ord on inv.iId=ord.iId
group by cust.cId
由于
左连接
,您将获得DUP,使用DISTINCT
的相同查询应该可以工作,例如:
cId name invcnt sum(ord.cId)
1 Danish 3 220
2 Dilkash 2 190
3 Dilshad 0
以下是由于
左连接而获得DUP的,使用DISTINCT
的相同查询应该可以工作,例如:
cId name invcnt sum(ord.cId)
1 Danish 3 220
2 Dilkash 2 190
3 Dilshad 0
这是《谢谢你》的可能副本,先生。。它是有效的。。。(另一个问题)也许你是对的,先生,但一开始我没有左连接,但问题是相同的。请查看此查询并从cust、inv、ord中选择cust.cId、cust.name、count(inv.iId)、sum(ord.cId),其中cust.cId=inv.cId和inv.iId=ord.iId按cust.cId分组;如果没有左联接
,您将无法执行此操作,因为它不会显示其他表中不存在的记录。谢谢您,先生。。它是有效的。。。(另一个问题)也许你是对的,先生,但一开始我没有左连接,但问题是相同的。请查看此查询并从cust、inv、ord中选择cust.cId、cust.name、count(inv.iId)、sum(ord.cId),其中cust.cId=inv.cId和inv.iId=ord.iId按cust.cId分组;如果没有left join
,则无法执行此操作,因为它不会显示其他表中不存在的记录。