2016-04-02 3 views
0

У меня есть модель Product s, и каждый продукт имеет 1 или более Sku s. Каждый sku имеет shipping_price и selling_price.SQL/Postgres SELECT, ORDER Наименьшее соотношение в пределах группы

Я бы хотел сортировать товары по их самому высокому или низкому коэффициенту skus shipping_price/selling_price, но у меня возникли проблемы с правильной обработкой запроса. Например, для «минимального коэффициента доставки» прямо сейчас у меня есть:

SELECT 
    p.id, 
    p.title, 
    array_agg(s.shipping_price) as shipping_prices, 
    array_agg(s.baseline_price) as baseline_prices, 
    min(s.shipping_price/s.baseline_price) as shipping 
FROM "Products" p 
JOIN "Skus" s 
ON p.id = s.product_id 
WHERE p.category_id in (1,2,3) 
GROUP BY p.id 
ORDER BY shipping ASC 
LIMIT 48 
OFFSET 0; 

Но это дает много нулей для shipping где они явно не нули. Похоже, мне нужна комбинация операций массива и мин, но я не уверен, как объединить методы HERE.

Есть ли простой способ сделать это?

ответ

1

Похоже, что тип сохраняется min, поэтому деление целого на другое целое округляет все до нуля.

Решение было бросить в двойной:

min(s.shipping_price*1.0/s.baseline_price) as shipping 
Смежные вопросы