3表内连接的SQL计算

标签 sql sqlite inner-join

我有三个表:Stock、Orderline 和 Order。我在 Order 表中有一个 Total 列,我想包含每个订单的订单总和。 Orderline 表由 Order_id、Stock_id 和 Qty 组成,Stock 表有 Stock_id 和 Price。我可以过滤与每个 Order_id 关联的 Stock_ids 并显示每个 Order_id 的数量,我认为我需要使用内部连接来计算每个订单的成本,方法是对每个 Stock_id 的价格求和并将其乘以 Orderline 中的数量表和 Stock 表中的价格,但我不知道从哪里开始。我还希望在为每个 Order_id 计算时将其添加到数据库中的 Total 列中,并且也不知道该怎么做。我正在使用 SQLite3。任何帮助将不胜感激。

订单表:
order_id、order_total、order_datetime

订单表:
order_id, stock_id, 数量

库存表:
stock_id、stock_price、stock_name

最佳答案

这是一个带有 INNER JOIN 的基本查询。按订单 ID 分组,按订单为您提供总计。您可以在 WHERE 中执行您需要的任何过滤器。 GROUP BY 之前的子句.

SELECT
    O.order_id,
    SUM(S.stock_price * OL.qty) AS [Total]
FROM Order O
    INNER JOIN Orderline OL
        ON OL.order_id = O.order_id
    INNER JOIN Stock S
        ON S.stock_id = OL.stock_id
GROUP BY
    O.order_id

虽然 sqlite 不支持计算列,但您有 2 个选项:
  • 创建添加到 Order 的列表来存储总计的值,然后在 Orderline 上创建触发器和 Stock表以重新计算修改记录的总数。
  • 将上面的查询转换为单独的 View ,然后执行 INNER JOIN从创建的 View 到您的Order每当您需要总数时都可以使用表格。
  • 关于3表内连接的SQL计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560112/

    相关文章:

    sql - 将不同日期的总和相加

    android - 仅当值不为 null android 时才更新 sqlite 数据库

    android - 如何在我的 Android 应用程序中加入两个 SQLite 表?

    MySQL:连接表本身。未知栏目

    c# - C# 的 MySql.Data.MySqlClient,大型 MySql 表的时间到期

    python - 如何使查询 sql 数据库的 python 脚本更加内存有效?

    android - 无法向 ListView 添加值

    mysql - 如何内连接2个表并对第三个表求和

    mysql - 从 MySQL 中的 3 列中进行复杂选择

    c# - 参数化 SQL 查询不返回数据;非参数化查询返回正确值