Нахождение минимума и максимума по стране

Я пытаюсь найти дистрибьютора с самым высоким и самым низким количеством для каждой страны. в двухколонном распределителе с минимальным количеством и максимальным количеством Мне удалось получить информацию из других сообщений, но она находится в столбце, однако я хочу, чтобы она была в строке для каждой страны.

См. 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"
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
38
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать подзапросы:

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;

Скрипка

Спасибо за это .. очень ясно

xmiha 18.03.2022 19:20
Ответ принят как подходящий

Вы также можете сделать это с помощью 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

Это тоже сработало. Я узнал три способа решить эту проблему

xmiha 18.03.2022 19:21

Вы можете сделать это с помощью одной сортировки и передать данные следующим образом:

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;

Обновленная рабочий пример

Еще один правильный подход

xmiha 18.03.2022 19:20

Другие вопросы по теме