Задать вопрос
@sashavol

Двойной SELECT вместе с UNION и возвратом наибольшего значения, как?

Доброго времени суток
2 дня пытаюсь сделать правильным запрос.

Задача заключается в том, чтобы при двойном запросе в таблицу вернуть наибольшее одно значение, но с UNION мне никак не удается это сделать при двойном запросе, возвращает 2 строки, но мне нужна одна строка с наибольшим значением столбца "rate". Задачу усложняет то, что перед тем как сравнить у 2 строк поле "rate" необходимо его умножить у каждой строки на значение n.

Запрос выглядит вот так:
SELECT * FROM (
		SELECT rate, type, route_id, weight, volume,
			row_number() OVER (PARTITION BY route_id ORDER BY volume) as num
		FROM test_rates rs
		WHERE
			rs.dt_del IS NULL
			AND rs.volume >= 300  -- первая выборка
	UNION
		SELECT rate, type, route_id, weight, volume,
			row_number() OVER (PARTITION BY route_id ORDER BY weight) as num
		FROM test_rates rs
		WHERE
			rs.dt_del IS NULL
			AND rs.weight >= 50000  -- вторая выборка
) q1
WHERE q1.num = 1 -- возвращаем только 1 строку


Сама таблица из себя представляет следующее (откройте вкладку result):

2 ключевых столбика это "weight" and "volume" для первого и второго запроса соответственно.

Результат первого запроса , вот такой (откройте вкладку result):


Можно на коммерческой основе. Я думаю здесь можно обойтись и без union, но полагаю с ним мы получаем нужные строки и можем работать с ними.
  • Вопрос задан
  • 103 просмотра
Подписаться 1 Простой Комментировать
Ответ пользователя Руслан . К ответам на вопрос (3)
LaRN
@LaRN
Senior Developer
Можно через временны запрос попробовать:
WITH rates as
(SELECT rate, type, route_id, weight, volume
   FROM test_rates rs
  WHERE rs.dt_del IS NULL
    AND (rs.volume >= 300 OR rs.weight >= 50000))
SELECT rate, type, route_id, weight, volume
  FROM rates
 where rate = (select max(rate) from rates)
Ответ написан
Комментировать