首页 > 解决方案 > 多对多关系中的多个 GROUP_BY 和 GROUP_CONCAT

问题描述

我有两张桌子:

顾客:

| CustomerID | Pickups | StartTime | EndTime |
| ---------- | ------- | --------- | ------- |
| a          | 1       | 10:00     | 10:03   |
| b          | 2       | 10:02     | 10:05   |
| c          | 5       | 10:07     | 10:10   |
| d          | 7       | 10:12     | 10:14   |
| e          | 0       | 10:12     | 10:14   |
| f          | 2       | 10:15     | 10:17   |
| g          | 1       | 10:18     | 10:20   |

结帐:

| CheckoutID | Purchases | Time |
| ---------- | --------- | ---- |
| 1          | 1         | 10:01|
| 2          | 1         | 10:02|
| 3          | 1         | 10:04|
| 4          | 2         | 10:08|
| 5          | 3         | 10:09|
| 6          | 4         | 10:13|
| 7          | 0         | 10:19|

我加入这些表时Checkouts.Time BETWEEN Customers.StartTime AND Customers.EndTime

我想要的最终输出:

| CustomerIDs | PurchaseIDs | Pickups | Purchases |
| ----------- | ----------- | ------- | --------- |
| a,b         | 1,2,3       | 3       | 3         |
| c           | 4,5         | 5       | 5         |
| d,e         | 6           | 4       | 7         |
| f           | null        | 2       | null      |
| g           | 7           | 1       | 0         |

我在实现这一点时遇到了问题,因为一个客户可能有多个结账,而一个结账可能涉及多个客户。我很好地为每个 CheckoutID 或 CustomerID 分别做一个 GROUP BY,但我真的迷失在第一步之后如何组合数据。

标签: mysqlgroup-byaggregategroup-concat

解决方案


推荐阅读