MYSQL - JOIN/SUB-SELECT,其中并非所有行都有所需的列,但有些行有

2j4z5cfb  于 4个月前  发布在  Mysql
关注(0)|答案(2)|浏览(56)

你好,我正在努力解决一个问题,并尝试了子选择和连接,但不能得到我需要的结果。下面是一个过于简化的数据库模式。
我期待的结果是能够提供按sessions.start_time分组的SUM(order_items.quantity)。
这变得复杂的地方是,不是order_items中的所有实体都有一个有效的session_id。有一个条目是有效的,它们都有一个共同的order_id。
例如(order_items表假设session_id = start_date 01-02-2024):
| ID|订单号|会话ID|数量|
| --|--|--|--|
| 1 | 1 | 1 | 2 |
| 2 | 1 |NULL| 5 |
| 3 | 2 | 1 | 2 |
| 4 | 2 |-1个| 2 |
预期产出将是

start_date | SUM(qty)

01-02-2024 | 11

字符串
本质上,我需要某种联接/子选择,可以提供按会话分组的SUM(order_items.quantity)。start_time然而,有人可以使用这样一个事实,即有一个order_items条目具有有效的session_id,其余条目具有共同的order_items.order_id。
我尝试了各种类型的连接(右,左等)都没有用

订单

  • ID -int
    订单_商品
  • ID -int
  • Order_ID -int
  • Session_ID -int
  • 数量-int
    会议
  • ID -int
  • 开始时间-日期时间
l7mqbcuq

l7mqbcuq1#

SELECT s.start_time, SUM(oi.quantity) AS total_quantity
FROM sessions s
JOIN (
    SELECT COALESCE(oi.Session_ID, oi_common.Session_ID) AS Session_ID, oi.quantity
    FROM order_items oi
    INNER JOIN (
        SELECT Order_ID, Session_ID
        FROM order_items
        WHERE Session_ID IS NOT NULL
    ) oi_common ON oi.Order_ID = oi_common.Order_ID
) oi ON s.ID = oi.Session_ID
GROUP BY s.start_time

字符串
这个quert通过关联有效的Session_IDs,然后将它们链接到sessions来检索start_time,从而对order_items中的量进行求和。

zbwhf8kr

zbwhf8kr2#

试试这个查询。

SELECT
s.start_time,
SUM(oi.quantity) AS total_quantity FROM
Sessions s JOIN(
    SELECT
        o.Order_ID,
        MAX(s.Session_ID) AS Session_ID
    FROM
        Order_Items o
    LEFT JOIN
        Sessions s ON o.Session_ID = s.ID
    GROUP BY
        o.Order_ID
) subq ON s.ID = subq.Session_ID JOIN
Order_Items oi ON subq.Order_ID = oi.Order_ID GROUP BY
s.start_time;

字符串

相关问题