Как разгруппировать переменную в SQL? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть запрос, что я соединил три разных источника данных: X, Y и Z. Но я хотел бы иметь еще одну переменную, которая показывает мне минимальную цену из источника данных X. Я имею в виду что-то вроде этого:

MIN(price) as min_price

Но это min_price должно зависеть только от product_id, поэтому я должен игнорировать shop_id или другие поля.

Как я могу это сделать или где я могу это поставить?

SELECT co1.shop_id,
         co1.product_id,
         co1.price,
         co2.manufacturer_id,
         co2.category_id
FROM X AS co1
JOIN 
    (SELECT id,
         manufacturer_id,
         category_id
    FROM Y
    GROUP BY  id, manufacturer_id, category_id) AS co2
    ON co1.product_id = CAST(co2.id AS bigint)
JOIN Z
    ON co1.shop_id = Z.shop_id
WHERE site_id = 1
GROUP BY  co1.shop_id, co1.product_id, co2.manufacturer_id, co1.price, co2.category_id

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете использовать оконные функции:

SELECT co1.shop_id, co1.product_id, co1.price,
       co2.manufacturer_id, co2.category_id,
       MIN(co1.price) OVER (PARTITION BY co1.product_id)
FROM . . .
...