Я пытаюсь найти дистрибьютора с самым высоким и самым низким количеством для каждой страны. в двухколонном распределителе с минимальным количеством и максимальным количеством Мне удалось получить информацию из других сообщений, но она находится в столбце, однако я хочу, чтобы она была в строке для каждой страны.
См. http://sqlfiddle.com/#!17/448f6/2
Желаемый результат
"country" "min_qty_name" "max_qty_name"
1. "Madagascar" "Leonard Cardenas" "Gwendolyn Mccarty"
2. "Malaysia" "Arsenio Knowles" "Yael Carter"
3. "Palau" "Brittany Burris" "Clark Weaver"
4. "Tanzania" "Levi Douglas" "Levi Douglas"
Вы можете использовать подзапросы:
select distinct country,
(select distributor_name
from product
where country = p.country
order by quantity limit 1) as min_qty_name,
(select distributor_name
from product
where country = p.country
order by quantity desc limit 1) as max_qty_name
from product p;
Вы также можете сделать это с помощью cte (результат здесь)
WITH max_table AS
(
SELECT ROW_NUMBER() OVER (partition by country order by country,quantity DESC) AS rank,
country, quantity,distributor_name
FROM
product
),
min_table AS
(
SELECT ROW_NUMBER() OVER (partition by country order by country,quantity) AS rank,
country, quantity,distributor_name
FROM
product
)
SELECT m1.country,m2.distributor_name,m1.distributor_name
from max_table m1, min_table m2
where m1.country = m2.country
and m1.rank = 1 and m2.rank = 1
Это тоже сработало. Я узнал три способа решить эту проблему
Вы можете сделать это с помощью одной сортировки и передать данные следующим образом:
with min_max as (
select distinct country,
first_value(distributor_name) over w as min_qty_name,
last_value(distributor_name) over w as max_qty_name
from product
window w as (partition by country
order by quantity
rows between unbounded preceding
and unbounded following)
)
select *
from min_max
order by min_max;
Еще один правильный подход
Спасибо за это .. очень ясно