Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从第二个表获取计数(生成的发票数量),从第三个表获取总和(订单总数)-MySQL_Java_Mysql_Sql - Fatal编程技术网

Java 从第二个表获取计数(生成的发票数量),从第三个表获取总和(订单总数)-MySQL

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

我想得到客户生成的发票数量和所有订单的总和。有三个表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`) 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
,则无法执行此操作,因为它不会显示其他表中不存在的记录。