【问题标题】:SQL - Multiplying 2 values from 2 tables to display a new table the resultsSQL - 将 2 个表中的 2 个值相乘以显示新表的结果
【发布时间】:2020-07-28 07:53:08
【问题描述】:

当我尝试在包含数量的一个表和包含价格的其他表之间进行乘法运算时,我无法在 SQL 中显示特定结果。

我认为图像和代码将帮助您更好地理解我的问题。

Image attached here

所以我有 6 个客户订单 (co_ID),在每个客户订单中,客户都购买了产品。 我正在尝试将每种产品的数量(来自客户订单详细信息表)乘以相关价格(来自产品表), 然后最终显示一个包含客户订单 ID 和该订单总价的新表格。

您可以看到我目前得到了不同的结果(在代码左侧的图像中)。

客户订单明细表:

+---------+--------+--------------+
| co_ID   | p_ID   | cod_quantity |
+---------+--------+--------------+
| 1000001 | 150009 |233           |
+---------+--------+--------------+
| 1000002 | 150001 | 400          |
+---------+--------+--------------+
| 1000002 | 150002 | 1000         |
+---------+--------+--------------+
| 1000002 | 150003 | 300          |
+---------+--------+--------------+
| 1000002 | 150004 | 600          |
+---------+--------+--------------+
| 1000002 | 150008 | 2000         |
+---------+--------+--------------+
| 1000003 | 150004 | 350          |
+---------+--------+--------------+
| 1000003 | 150005 | 500          |
+---------+--------+--------------+
| 1000003 | 150007 | 800          |
+---------+--------+--------------+
| 1000003 | 150008 | 1000         |
+---------+--------+--------------+
| 1000004 | 150001 | 450          |
+---------+--------+--------------+
| 1000004 | 150002 | 800          |
+---------+--------+--------------+
| 1000004 | 150005 | 700          |

客户订单表

╔═════════╦════════╦═════════════════════╗
║ co_ID   ║ c_ID   ║ co_date             ║
╠═════════╬════════╬═════════════════════╣
║ 1000001 ║ 200001 ║ 2020-07-19 12:35:28 ║
╠═════════╬════════╬═════════════════════╣
║ 1000002 ║ 200002 ║ 2020-07-19 14:53:14 ║
╠═════════╬════════╬═════════════════════╣
║ 1000003 ║ 200003 ║ 2020-07-19 09:12:40 ║

代码为:

SELECT factory.customer_order.co_ID, factory.customer_order_details.cod_quantity * factory.product.p_price
AS total_price
FROM factory.customer_order_details, factory.product, factory.customer_order
WHERE factory.customer_order_details.co_id = factory.customer_order.co_id;

如果有任何帮助,我将不胜感激,在这种情况下,我现在正在尝试解决这个问题。

仅供参考 - 我会将总价格保存为客户订单表中的一列(带有日期的右侧),但我需要将其标准化(BCNF),我认为它不会被标准化里面的价格。

【问题讨论】:

  • 嗨,现在好些了吗?
  • 没有。我再次向您推荐我之前的评论。链接的答案非常具体。
  • 您需要factory.product 的加入条件。否则,您将为每个产品生成一行,而不仅仅是订单中的产品。
  • 如果你学会使用 ANSI JOIN 语法,你就不会犯这个错误。

标签: mysql sql


【解决方案1】:

您需要customer_order_detailsproduct 之间的连接条件,以便乘以正确的产品价格。

并且要获得每个订单的总数,您需要使用SUM() 聚合函数和GROUP BY

SELECT co.co_ID, SUM(cod.cod_quantity * p.p_price) AS total_price
FROM customer_order AS co
JOIN customer_order_details as cod ON cod.co_id = co.co_id
JOIN product AS p ON p.p_id = cod.p_id
GROUP BY co.co_ID

【讨论】:

  • 非常感谢 Barmar,我需要更多地练习 JOIN 语法。我尝试实现您编写的内容,但收到错误代码 1054: unknown column factory.customer_order.co_ID in 'field list' 即使它已定义且我没有拼写错误。你知道是什么原因造成的吗?
  • 如果在FROMJOIN 子句中为表指定别名,则不能在SELECT 列表中使用完整的表名。你必须写co.co_ID,而不是factory.customer_order.co_ID
  • 谢谢Barmar,你真的帮了我很多!祝你有个美好的一天,我的朋友
  • @RonSwanson 。 . .如果这回答了您的问题,您应该接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多