繁体   English   中英

SQL发票三表合一查询

[英]SQL invoice three tables into one query

你好,

我有3张桌子:

CREATE TABLE `invoice` (
  `id` int(11) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `invoice` (`id`) VALUES
(1), 
(2), 
(3);

CREATE TABLE `invoice_deduction` (
  `id` int(11) NOT NULL,
  `invoiceId` int(11) NOT NULL,
  `deductionId` int(11) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (`invoiceId`) REFERENCES `invoice` (`id`),
  FOREIGN KEY (`deductionId`) REFERENCES `invoice` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `invoice_deduction` (`id`, `invoiceId`, `deductionId`) VALUES
(1, 2, 1),
(2, 3, 1),
(3, 3, 2);

CREATE TABLE `invoice_item` (
  `id` int(11) NOT NULL,
  `invoiceId` int(11) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (`invoiceId`) REFERENCES `invoice` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `invoice_item` (`id`, `invoiceId`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 2),
(5, 2),
(6, 3),
(7, 3),
(8, 3);

例如:

  • 第一张发票包含 3 项(共:3 项)
  • 第二张发票包含来自第一张发票的 3 个项目(扣减)和 2 个新项目(总计:5 个项目)
  • 第三张发票包含第一张发票的 3 个项目(扣款)、第二张发票的 2 个项目(扣款)和 3 个新项目(共 8 个项目)

所以我想用这个结果查询:

id | count of items (with deductions)
3  | 8
2  | 5
1  | 3

我从这个查询开始:

SELECT 
    i.id, COUNT(*) as countItems
FROM
    invoice i JOIN invoice_item it ON i.id = it.invoiceId
GROUP BY
    it.invoiceId
ORDER BY 
    countItems
DESC

我预先感谢您的帮助。

我认为你想要一个累积总和:

SELECT i.id, COUNT(*) as countItems,
       SUM(COUNT(*)) OVER (ORDER BY it.id)
FROM invoice i JOIN
     invoice_item it
     ON i.id = it.invoiceId
GROUP BY i.id
ORDER BY countItems;

我不知道你为什么使用LEFT JOIN 我不知道为什么您的invoiceId值与有效发票不匹配。 所以我把它切换到内部连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM