仅当两个或多个记录具有相同值时才连接两个表并分组
joining two tables and grouping only if two or more records has same value
我有 2 个表:
manifests
id | customer | paid_order | price | payment_method
paid_orders
id | paid
JOIN paid_orders ON manifests.paid_order = paid_order_id
Let's assume this scenario:
There are 2 same customer
but has different 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
而且PICK只有0
的payment_method
只有 如果有两个相同的客户。
预期结果:
customer | paid_order | price | payment_method | paid |
1 | 1 | 200 | 0 | 200 |
2 | NULL | 150 | 1 | NULL |
一种方法是始终 select 来自一个或多个客户记录的记录,其中 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
为零,那么这条记录将成为目标。否则,将针对一个值记录。
我有 2 个表:
manifests
id | customer | paid_order | price | payment_method
paid_orders
id | paid
JOIN paid_orders ON manifests.paid_order = paid_order_id
Let's assume this scenario:
There are 2 samecustomer
but has differentpayment_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
而且PICK只有0
的payment_method
只有 如果有两个相同的客户。
预期结果:
customer | paid_order | price | payment_method | paid |
1 | 1 | 200 | 0 | 200 |
2 | NULL | 150 | 1 | NULL |
一种方法是始终 select 来自一个或多个客户记录的记录,其中 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
为零,那么这条记录将成为目标。否则,将针对一个值记录。