mysql—只有在两个或多个记录具有相同值时才连接两个表并分组

7bsow1i6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(331)

这个问题在这里已经有答案了

如何选择最大值(列值)的行,与sql中的另一列不同(19个答案)
两年前关门了。
我有两张table:

manifests
id | customer | paid_order | price | payment_method

paid_orders
id | paid

JOIN paid_orders ON manifests.paid_order = paid_order_id

假设这个场景:
有两个相同的 customer 但有不同的 payment_method .

customer | paid_order | price | payment_method |  paid  |
    1    |      1     | 200   |        0       |  200   |
    1    |     NULL   | 100   |        1       |  NULL  |
    2    |     NULL   | 150   |        1       |  NULL  |

我只想 GROUP BY customer 但也只能选择 payment_method0 只有有两个相同的客户。
预期结果:

customer | paid_order | price | payment_method |  paid  |
    1    |      1     | 200   |        0       |  200   |
    2    |     NULL   | 150   |        1       |  NULL  |
r1wp621o

r1wp621o1#

一种方法是总是从一个或多个客户记录中选择记录,其中 payment_method 具有最小值:

SELECT m1.*
FROM manifest m1
INNER JOIN
(
    SELECT customer, MIN(payment_method) AS min_payment_method
    FROM manifest
    GROUP BY customer
) m2
    ON m1.customer = m2.customer AND m1.payment_method = m2.min_payment_method;

这个逻辑应该是可行的,因为如果 payment_method 如果存在0,则该记录将成为目标。否则,单值记录将成为目标。

相关问题