gpt4 book ai didi

mysql - 两个表之间的条件语句

转载 作者:行者123 更新时间:2023-11-29 15:45:05 25 4
gpt4 key购买 nike

我有两张 table 。
一个包含事件,列:

id, start_time, end_time, location_id 

另一个带有订单,列:

id, time_placed, location_id

基本上,我想要的是一个包含所有事件的新表和一个包含该事件的订单数的新列。我对这些订单进行分组的方式将取决于它们是否放置在事件的开始时间和结束时间之间,以及它们是否与事件共享相同的 location_id。我对如何做到这一点感到非常困惑。每个事件都有自己的唯一 ID,每个订单都有自己的唯一 ID。

由于表的大小,我无法真正将表导出到 csv 并在 Python 中尝试任何操作,因此必须在 mySQL 中完成。

我尝试过探索 CASE 语句和循环,但我尝试的任何方法都不起作用,所以我可能做错了。

所以我最终想要的是一个包含变量的表:event_id 和 order_count。

id           order_count
1 7383
2 383
3 83838

最佳答案

您想要的是一起查看 EVENTSORDERS 表,以便构成 JOIN。但是,由于您想要所有事件,无论是否下订单,因此您希望它是LEFT JOIN。如果您执行了INNER JOIN,那么您最终只会得到发生订单的事件,而不是所有事件。所以现在,您的查询将如下所示:

SELECT *
FROM events e
LEFT JOIN orders o

eventsorders 将在 location_id 上连接,因此您将其添加到 ON 子句中连接:

SELECT *
FROM events e
LEFT JOIN orders o
ON e.location_id = o.location_id

由于订单也是根据时间关联的,因此您还需要将其添加到 ON 子句中:

SELECT *
FROM events e
LEFT JOIN orders o
ON e.location_id = o.location_id
AND e.start_time <= o.time_placed -- event starts before/at order
AND e.end_time >= o.time_placed -- event ends after/at order

这将正确连接表。接下来您需要将它们分组。由于您希望通过 event 获得它,因此您将在 `id:

event 列上进行分组
SELECT *
FROM events e
LEFT JOIN orders o
ON e.location_id = o.location_id
AND e.start_time <= o.time_placed -- event starts before/at order
AND e.end_time >= o.time_placed -- event ends after/at order
GROUP BY e.id

最后,使用您想要的字段填充 SELECT,使用 COUNT 获取每个事件的订单数:

SELECT e.id,
COUNT(o.id) AS order_count
FROM events e
LEFT JOIN orders o
ON e.location_id = o.location_id
AND e.start_time <= o.time_placed -- event starts before/at order
AND e.end_time >= o.time_placed -- event ends after/at order
GROUP BY e.id

如果您需要 events 表中的其他字段(start_timeend_time),则需要将它们添加到 SELECT AND GROUP BY 部分。

关于mysql - 两个表之间的条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com