sql - 连接表以创建两个单独订单的总和
问题描述
我试图将每个项目的成本转到最终表,它只显示最终的 ORDER_ID 和 ORDER_TOTAL。我在让我的两个表加入时遇到问题,并且在整体上与 JOIN 作斗争。这是我要加入的两个表。
订单成本
CREATE TABLE `order cost` (
`ORDER_ID` int(10) NOT NULL,
`MENU_COST` double(5,2) NOT NULL,
`ORDER_COST` double(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `order cost` (`ORDER_ID`, `MENU_COST`, `ORDER_COST`) VALUES
(1, 7.00, 7.63),
(3, 8.00, 8.72),
(1, 13.00, 14.17),
(3, 25.00, 27.25);
ALTER TABLE `order cost`
ADD PRIMARY KEY (`ORDER_COST`),
ADD KEY `ORDER_ID` (`ORDER_ID`),
ADD KEY `MENU_COST` (`MENU_COST`);
合计订单
CREATE TABLE `order total` (
`ORDER_ID` int(11) NOT NULL,
`ORDER_TOTAL` double(6,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `order total` (`ORDER_ID`, `ORDER_TOTAL`) VALUES
(1, 0.00),
(3, 0.00);
ALTER TABLE `order total`
ADD KEY `ORDER_ID` (`ORDER_ID`);
我的加入代码尝试:
SELECT ORDER_ID,
SUM(MENU_COST) = ORDER_TOTAL
FROM `order cost`
INNER JOIN `order total`
GROUP BY ORDER_ID;
我尝试了多种其他加入想法,并且在主订单成本表中,我能够在运行后获得 SUMS(ORDER_COST) 来创建自己的单元格
SELECT ORDER_ID, SUM(MENU_COST) FROM `order cost` GROUP BY ORDER_ID
但这会在运行后创建自己的表,而我希望根据数据库的更改让表在“订单总数”中自动生成。
解决方案
请参阅上面的评论,了解我对不这样做的想法。每次更改 ordercost 表时都必须运行此查询:
UPDATE
ordertotal
SET
order_total = (
SELECT SUM(MENU_COST) FROM ordercost WHERE ORDER_ID = x GROUP BY ORDER_ID
)
WHERE order_id = x
这里没有加入..您将一些新项目插入 ordercost,然后运行查询以同步表。总的来说,这是一个糟糕的主意。您应该考虑改为创建一个 VIEW 并在需要时从中进行选择:
CREATE VIEW ordertotal AS
SELECT
ORDER_ID,
SUM(MENU_COST) as ORDER_TOTAL
FROM ordercost
GROUP BY ORDER_ID
它将表现得像一张桌子:
SELECT * FROM ordertotal where order_id = 3
推荐阅读
- android - Nativescript CLI 说 Android SDK 配置不正确,但我不知道如何修复它
- excel - 使用 vba 对日期进行排序
- javascript - 窗口事件侦听器未触发
- python - 使用 Python 3.8.5 删除列表中的重复数字
- flutter - Flutter:无法使用 SliverAppBar 将状态栏设置为透明
- .net-core - 无法理解 Net Core 3 中的“单文件可执行文件”功能
- split - 将拆分代理位置设置为原始代理位置
- java - 使用 stringValue() 或 like() 过滤时,带有 MongoDB 的 QueryDSL 无法将属性从 Long 类型序列化为 String
- python - Firebase 实时数据库 - 无法将文档读取为 json/字典
- python - 使用 CBC 和 PKCS5Padding Python 3 进行 AES 加密/解密