объединение двух таблиц и группирование, только если две или более записей имеют одинаковое значение [дубликаты]

0

У меня есть 2 таблицы:

manifests
id | customer | paid_order | price | payment_method

paid_orders
id | paid

JOIN paid_orders ON manifests.paid_order = paid_order_id

Предположим, что этот сценарий:
Есть 2 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 но также PICK только payment_method из 0 только если есть два одинаковых клиента.

Ожидаемый результат:

customer | paid_order | price | payment_method |  paid  |
    1    |      1     | 200   |        0       |  200   |
    2    |     NULL   | 150   |        1       |  NULL  |
  • 0
    @Strawberry Я не уверен, что это точная копия здесь, потому что есть некоторая бизнес-логика, которая должна предполагать, чтобы написать такой запрос.
  • 0
    paid_order записи manifests могут иметь одинаковые идентификаторы paid_order Игнорируя payment_method = 1 мы можем сосредоточиться на customers . Но я не хочу исключать все payment_method = 1 , потому что мне также нужен клиент.
Показать ещё 6 комментариев
Теги:
relational-database

1 ответ

1
Лучший ответ

Один из подходов заключался бы в том, чтобы всегда выбирать запись из одной или, возможно, более записей о клиентах, где метод 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 of zero, эта запись будет нацелена. В противном случае одно значение будет нацелено.

  • 0
    Ваш ответ идентичен связанным решениям
  • 0
    Хотя ответ хороший, я бы предпочел иметь критерии в WHERE для удобства чтения: select * from manifests where (customer, payment_method) in (select customer, min(payment_method) … .
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню